默认构造函数
两个问题
- c++什么时候合成默认构造函数?
- c++合成的默认构造函数都做些什么?
c++什么时候合成默认构造函数
以下三个条件同时满足:
- 源程序中没有声明任何构造函数
- 编译器需要该类有默认构造函数
- 程序中需要调用默认构造函数(默认构造函数是以编译单元为单位生成的)
什么时候编译器需要默认构造函数
- 该类中有(有默认构造函数)的成员对象
- 该类继承一个有默认构造函数的类
- 该类是多态的(有虚函数,或者继承的类有虚函数)
- 该类有一个虚基类
c++合成的默认构造函数都做了些什么
编译器合成的默认构造函数只做它需要做的事情。
对于以上四类,所做的工作各不相同,主要是初始化。
编译器合成的默认构造函数是inline,所以每个编译单元都会有一个(或0个)默认构造函数。这样做的好处是,如果在程序中,不需要调用类的默认构造函数,则不会合成默认构造函数。同时,inline也不会造成运行时的效率损失。