C++对象模型

  • 继承规则下的内存布局
  • 普通单一继承  虚函数表合并,其他成员依次排开
  • 普通多重继承  各积累按继承顺序依次排开,本身虚函数合并入第一个积累的虚函数表,其他成员依次排开
  • 虚单一继承      自身成员    基类成员依次排开
  • 菱形虚拟继承  以普通多继承方式进行  但需要抽取出其中的虚继承的基类成员合并到类最后      


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

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

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值