以下代码的问题是从书约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) “C++对象模型内部”,则输出为:
我这里还有我的问题
1的sizeof(X)= 1
书中说当X类型生成两个实例时,比如说xa和xb。编译会在A中插入一个字节,以便xa和xb可以具有不同的地址。我不太明白原因。
2,的sizeof(Y)= 4
通过使用虚拟继承,我们将有一个额外的虚拟指针?我想这可能与多态中的虚拟指针不同。任何人都可以给我Y的内存布局吗?
谢谢!
每个问题一个问题请 –
第一个问题,检查:http://stackoverflow.com/questions/621616/c-what-is-the-size-of-an- rq = 1 –
我认为你的主要问题是,因为Y使用虚拟继承来从非多态类X派生,而Y本身是非多态的,所以虚拟继承本身会导致Y有一个V表,因此它的大小是4 .. – CashCow