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);
};



posted on 2012-02-23 21:22  飘行天下  阅读(799)  评论(0编辑  收藏  举报

导航