C++对象模型探索:什么情况下必须需要默认构造函数

Posted 敲代码的Messi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++对象模型探索:什么情况下必须需要默认构造函数相关的知识,希望对你有一定的参考价值。

  1. 当你使用静态分配的数组,而数组元素类型是某个类的对象时,就要调用默认的构造函数,比如下面的代码。
    Object buffer[10]; // call default constructor

  2. 当你使用动态分配的数组,而数组元素类型是某个类的对象时,就要调用默认的构造函数,比如下面的代码,如果Object没有默认的构造函数,是无法通过编译的,因为new操作符要调用Object类的无参构造函数类初始化每个数组元素。
    Object* buffer = new Object[10];

  3. 当你使用标准库的容器时,如果容器内的元素类型是某个类的对象时,那么这个类就需要默认的构造函数,原因同上。
    vector buffer;

  4. 一个类A以另外某个类B的对象为成员时,如果A提供了无参构造函数,而B未提供,那么A则无法使用自己的无参构造函数。
    下面代码会编译不过。

class B

    B(int i)
;

class A

    A()
    B b;
;

int main(void) 
 
    A a(); // error C2512: 'B' : no appropriate default constructor available

    getchar() ; 
    return 0 ; 
 

原文:https://www.cnblogs.com/graphics/archive/2012/10/02/2710340.html

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于C++对象模型探索:什么情况下必须需要默认构造函数的主要内容,如果未能解决你的问题,请参考以下文章

[ C++ ] C++类与对象之 类中6个默认成员函数

C++ ----类与对象(上)

C++对象模型

C++ 拷贝构造函数和赋值运算符

为啥我们需要一个默认构造函数来在 C++ 中通过引用传递一个对象?

[ C++ ] C++类与对象(中) 类中6个默认成员函数 -- 运算符重载