C++虚函数内存布局(二)
D d;
c=&d;//c=((C*)(char*)&d)+sizeof(B);
A *a=&d;//简单拷贝i地址即可
getchar();
return 0;
}
虚拟继承的内存布局
实现上的挑战就是提供一个有效的方法把不同对象维护的那个虚基类对象折叠成一个单一的对象,并且还要保存子类与父类之间多态指针的多态赋值操作。
一般的实现方法是,分割为两个部分,一个是不变部分,是指不管后继如何演化,总是有固定的offset,这一部分数据可以直接存取,另一部分是共享局部,是指virtual base class 部分,这一部分的数据位置会不断发生变化,只可以被间接存取。
class X
{
int c;
};
class Y: public virtual X
{
int a;
};
class Z:public virtual X
{
int b;
};
class A:public Y,public Z
{
//int d;
};
int main()
{