- 继承规则下的内存布局
- 普通单一继承 虚函数表合并,其他成员依次排开
- 普通多重继承 各积累按继承顺序依次排开,本身虚函数合并入第一个积累的虚函数表,其他成员依次排开
- 虚单一继承 自身成员 基类成员依次排开
- 菱形虚拟继承 以普通多继承方式进行 但需要抽取出其中的虚继承的基类成员合并到类最后
- C++编译器在以下4种情况中才会增加有意义的(或者说必须增加)默认构造函数(仅含内置类型的对象并无默认构造)
1 类内含有非内置对象(内置对象的初始化需程序员手动完成);2类继承自一个(含有意义的构造函数的)基类;
3含有virtual函数(构建vptr及vtbl);4virtual继承(构建指向虚基类的指针)
- 当拷贝展现bitwise copy语义时编译器不需要生成默认拷贝构造。同以上4点的情况下,为非bitwise copy,需要有拷贝构造函数
- 利用派生类初始化基类为非bitwise copy,因为vptr不能被一同拷贝,否则危险!
- virtual 继承的下的派生类间相互赋值,指向虚基类的指针不能一同拷贝!