C++虚继承内存分布

本周抽空看虚继承的时候,研究了下虚继承的对象的内存分布,C++虚继承主要解决了菱形继承访问不明确的问题。

上述继承关系,定义DD对象的构造函数输出如下:AA BB AA CC DD,对象中存在两份AA。若AA存在成员变量,访问该变量时会出现访问不明确的错误。使用虚继承后可解决该问题:

创建DD对象,构造函数输出为AA BB CC DD,对象只存在一份AA。这是因为虚继承会生成一个虚基表指针vbptr(与虚函数指针vfptr不同),vbptr指向虚基表。虚基表记录着类相对于vbptr在对象中的偏移量。例如,BB虚继承AA,BB会生成vbptr,指向一个虚基表,该表有两项:第一项为BB相对与vbptr偏移量为-4,因为BB以vfptr开始,需要vbptr向前偏移4位才是BB对象的起始位置;第二项为AA相对于vbptr偏移量为8(4字节vbptr指针和4字节m_b)。
用VS看下DD的内存分布如下:

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值