2.1 Default Constructor 的构造操作
对于 class X,如果没有任何的 user-declared constructor,那么会有一个 default constructor 被隐式声明出来。一个被隐式声明出来的 default constructor 将是一个 trivial constructor。
2.2 “带有 Default Constructer” 的 Member Class Object
如果一个 class 没有任何 constructir,但它内含一个 member object,而后者有 default constructor,那么这个 class 的 implicit default constructor 就是 nontrivial,编译器需要为该 class 合成出一个 default constructor。
“带有 Default Constructer” 的 Base Class
“带有一个 Virtual” 的 Class
class 声明(或继承)一个 virtual function。
class 派生自一个继承串链,其中有一个或更多的 virtual base classes。
“带有一个 Virtual Base Class” 的 Class
总结
C++ 新手一般有两个常见的误解:
任何 class 如果没有定义 default constructor,就会被合成一个出来。
编译器合成出来的 default constructor 会显示设定 “class 内每一个 data member的默认值”。
2.2 Copy Constructor 的构造操作
Default Memberwise Initialization
Bitwise Copy Semantics(位逐次拷贝)
不要 Bitwise Copy Semantics
当 class 内含有一个 member object 而后者的 class 声明有一个 copy constructor 时。
当 class 继承自一个 base class 而后者存在一个 copy constructor 时。
当 class 声明了一个或多个 virtual functions 时。
当 class 派生自一个继承串链,其中有一个或多个 virtual base classes 时。
重新设定 Virtual Table 的指针
处理 Virtual Base Class Subobject
2.3 程序转化语义学
显式的初始化操作
参数的初始化
返回值的初始化
在使用者层面做优化
在编译器层面做优化
Copy Constructor:要还是不要?
2.4 成员们的初始化队伍
当初始化一个 reference member 时。
当初始化一个 const member 时。
当调用一个 base calss 的 constructor ,而它拥有一组参数时。
当调用一个 member class 的 constructor,而它拥有一组参数时。