最近读到Lippman的《深度探索C++对象模型》,对类的知识又复习了一遍。这次就先写个default constructor吧。
对于C++新手来说,一个常见的误区是:如果一个class没有定义任何的constructor,那么编译器将会生成一个default constructor。然而,事实并不总是如此,下面就列举编译器会自动合成default constructor的情况:
“当编译器需要default constructor的时候,它才会自动合成一个”
1、“带有default constructor”的member class object;
2、“带有default constructor”的base class;
3、“带有一个virtual function”的class;
4、“带有一个virtual base class”的class;
下面一一介绍它们:
情形1、“带有default constructor”的member class object:即一个classA包含了一个对象成员objectB,而这个对象成员定义了(classB的)default constructor,那么编译器会为classA合成一个default constructor。请看如下代码:
class B{B(){};…};
class A{ public: B b; //对象成员};
int main (){
A a; //对象b需要在此时初始化。
…}
在classA中包含的对象成员b必须在对象a创建时初始化