C++菱形继承(再剖析)

 

当子类对象给父类对象的时候,怎么找公共的虚基类(A)

就得通过偏移量来算虚基类的位置

----------------------------------------------------------------------------------------------------------------------------

我们来分析一下B对象有多大

 上面我们是看  D对象虚继承模型当中的B ,可是我们如果单看一个B呢,就仅仅只是一个单继承了(或者说是加了虚继承的单继承)

 只是这么单看的话,B对象当中有_b   那B对象当中有没有_a

肯定是有的,只是怎么存的问题

 为什么是12呢 ,我们来看看bb对象的内存模型

 虚继承连腰部(B、C)的类的内存模型都会受到影响,影响的不仅仅是D

可是为什么要这么设计呢(连腰部的类都要这么设计,将公共的A统一放到了最下面)????

 

 编译器不需要去区分,传的D还是B了,直接去按统一的方式去找_a

所以说菱形虚拟继承是更复杂的,而且效率对也是有一定的影响,当我们去找虚基类的时候,需要先通过指针找到虚基表,在通过虚基表当中的偏移量,将地址加减来找到我们的虚基类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值