C++中的默认构造函数
>> Compiler何时自动生成Default Constructor
前文说到C++中的默认构造函数,那我们看看什么时候会生成default constructor。
1. 类成员中有成员是类对象,并且该成员的类含有默认构造函数
C++编译器会帮你 给这个类也生成一个默认构造函数,用来调用其成员对象的构造函数,完成该成员的初始化构造。需要注意的是,如果这个成员的类也没有给出默认构造函数,那么 C++编译器也不会帮你生成该类的默认构造函数。
所以对于POD类型的struct,我们可以认为它就是C-Style struct。
2. 这个类的基类有默认构造函数
C++编译器也会帮你生成该派生类的默认构造函数,以调用基类的默认构造函数,完成基类的初始化。
如果基类没有提供这个默认构造的函数,那么C++编译器也不会为派生类生成默认的构造函数。
3. 类中存在虚函数,那么C++编译器会为你生成默认构造函数,以初始化虚表(虚函数表vftable)。
4. 存在虚基类,那么C++编译器会为你生成默认构造函数,以初始化虚基类表(vbtable)。
>> C++ 11 中的Defaulted Constructor
C++ 11增加了一个default关键字
struct SomeType
{
SomeType() = default; //The default constructor is explicitly stated.
SomeType(OtherType value);
};