本章主要介绍在不同的继承体系下,针对类的构造、析构及拷贝操作,编译器为其做了哪些工作。
1.继承体系下的对象构造
- 我们使用构造函数的初始化成员列表初始化成员时,对于对象会分别调用其拷贝构造函数。
- 含有虚函数的,编译器在其构造函数中设置虚函数表,这是最好的时机。但可以考虑和初始化成员哪个放前面好?
- 虚拟继承体系下,对虚基类成员初始化应由最后一层类负责。可以想象,不然呢?交由哪个subobject都不合适。
- 文中提到,如果在构造函数中,调用了一个虚成员函数,该如何决议?多态?如果不使用多态,该如何做?
2.对象复制语义学
提起拷贝赋值(assignment)函数,就得提bitwise拷贝。对于非用户定义的默认拷贝赋值操作,如果内有成员对象(member object)且该类定义了拷贝赋值函数,合成的默认构造函数会调用该类定义的拷贝赋值函数,为什么呢?为什么不呢?!这其实并不能算是一个问题。可以想象,用户既然定义了一个拷贝赋值函数,可以理解为本来就是为了拒绝使用bitwise拷贝,所以这就是为什么编译器会调用该类定义的拷贝赋值函数。
注:本章内容详细且易理解,记录倒不如直接看书。
参考资料: