以下代码来自《Inside the C++ object model》一书
#include <iostream>
using namespace std;
class X{};
class Y: public virtual X{};
class Z: public virtual X{};
class A: public Y, public Z{};
int main()
{
cout<<sizeof(X)<<" "<<sizeof(Y)<<" "<<sizeof(Z)<<" "<<sizeof(A)<<endl;
return 0;
}
在我的电脑(Windows,VS2010)中,输出为:
1 4 4 8
这是我的问题
1、大小(X)=1
书上说当 X 类型生成两个实例时,比如 xa 和 xb。编译在 A 中插入一个字节,以便 xa 和 xb 可以具有不同的地址。我不太明白其中的原因。
2、大小(Y)=4
通过使用虚拟继承,我们会有一个额外的虚拟指针吗?我想这可能与多态中的虚拟指针不同。谁能给我 Y 的内存布局?
谢谢!