【发布时间】:2012-10-20 20:15:39
【问题描述】:
以下代码来自《深入了解C++对象模型》一书
#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, sizeof(X)=1
书上说当 X 类型生成两个实例时,比如说 xa 和 xb。编译在 A 中插入一个字节,以便 xa 和 xb 可以具有不同的地址。我不太明白其中的原因。
2, sizeof(Y)=4
通过使用虚拟继承,我们会有一个额外的虚拟指针吗?我想这可能与多态中的虚拟指针不同。谁能给我 Y 的内存布局?
谢谢!
【问题讨论】:
-
每个问题一个问题
-
第一个问题,检查:stackoverflow.com/questions/621616/…
-
我认为您的主要问题是,因为 Y 使用虚拟继承从非多态类 X 派生,并且 Y 本身是非多态的,所以虚拟继承本身是否会导致 Y 具有 v-表因此它的大小是 4..
标签: c++ inheritance virtual