继承的对象内存,vbptr

先看普通继承的内存是如何组成的:

class base
{
private:
    int ma;
};
class derive: public base
{
private :
    int mb;
};
/*
base::
    ma
mb  
*/
``

虚继承的对象内存分布:

class base
{
private:
    int ma;
};
class derive:virtual public base
{
private :
    int mb;
};
/*
1:先按照普通继承的方式写出来
base::
    ma
mb  
2:再把虚基类放到最后面,原来的位置放置vbptr虚基类指针;
vbptr
mb  
base::
    ma
*/

vbptr指向虚基类表,表的第一行是vbptr指针离子对象的偏移量,一般为0
表的第2行是vbptr离虚基类数据的偏移量,上例是8;

当一个类多继承时,虚基类的优先级最高,也就是说先构造虚基类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值