C++对象模型

来源:互联网 发布:java web mvc 框架 编辑:程序博客网 时间:2024/05/22 03:02
  • 继承规则下的内存布局
  • 普通单一继承  虚函数表合并,其他成员依次排开
  • 普通多重继承  各积累按继承顺序依次排开,本身虚函数合并入第一个积累的虚函数表,其他成员依次排开
  • 虚单一继承      自身成员    基类成员依次排开
  • 菱形虚拟继承  以普通多继承方式进行  但需要抽取出其中的虚继承的基类成员合并到类最后      


  • C++编译器在以下4种情况中才会增加有意义的(或者说必须增加)默认构造函数(仅含内置类型的对象并无默认构造)

1 类内含有非内置对象(内置对象的初始化需程序员手动完成);2类继承自一个(含有意义的构造函数的)基类;

3含有virtual函数(构建vptr及vtbl);4virtual继承(构建指向虚基类的指针)

  • 当拷贝展现bitwise copy语义时编译器不需要生成默认拷贝构造。同以上4点的情况下,为非bitwise copy,需要有拷贝构造函数
  • 利用派生类初始化基类为非bitwise copy,因为vptr不能被一同拷贝,否则危险!
  • virtual 继承的下的派生类间相互赋值,指向虚基类的指针不能一同拷贝!


0 0
原创粉丝点击