先看普通继承的内存是如何组成的:
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;
当一个类多继承时,虚基类的优先级最高,也就是说先构造虚基类
本文详细解析了C++中虚继承的概念及其对对象内存布局的影响,包括虚基类指针(vbptr)的作用及虚基类表的结构。
1万+

被折叠的 条评论
为什么被折叠?



