【有书共读】深度探索c++对象模型
第二章 构造函数语意学
default constructor 在编译器需要的时候被合成,对于class X,如果没有任何的user-declared constructor 那么default constructor被隐式的声明出来。如果一个class没有任何的constructor ,但它内含一个member object,而后者有default constructor,那么这个class的implicit default constructor就是“nontrivial”,编译器需要为该class合成一个default constrctor。不过该合成操作只有在 constructor真正需要被调用时才会发生。
带有default constructor的Base Class
类似道理,如果一个没有任何constructor的class派生一个带有default constrctor的base class,那么这个derived class的default consturctor会被视为nontrivial,并因此需要被合成出来。它将调用上一层base class 的default constructor 。对一个后继派生的class而言,这个合成的constructor和一个“被显示提供的default constructor没有什么差异”
带有一个virtual function 的class
这两种情况也需要合成default constructor 。
1 class声明(或者继承)一个virtual function
2 class 派生自一个继承串链,其中有一个或更多的virtual classes
copy constructor的构造操作成员们的初始化队伍