构造函数语义学
主题:论述编译器对于“对象构造过程”的干涉,以及对于“程序形式”和“程序效率”上的冲击
一.默认构造函数的建构操作和拷贝构造函数的建构操作
ARM:默认构造函数和拷贝构造函数在必要时,才被编译器产生出来。
说明:“必要”意指当类不展现按位逐次拷贝语义(bitwise copy semantics)时
1.导致编译器必须为未声明构造函数的类合成一个默认构造函数的四种情况:
(1)如果一个类没有任何构造函数,但它内含一个成员对象(member object),而后者有默认构造函数。
(2)如果一个类没有任何构造函数,它派生自一个“带有默认构造函数”的基类
(3)如果一个类声明(或继承有)一个虚函数
(4)如果一个类派生体系中有虚基类
2.导致编译器必须为未声明拷贝构造函数的类合成一个拷贝构造函数的四种情况:
(1)当一个类内含一个成员对象而后者的类声明有一个拷贝构造函数时
(2)当类继承自一个基类而后者存在一个拷贝构造函数时
(3)当类声明了虚函数时
(4)当类的继承体系中有虚基类时