Jun*_*jie 9 c++ virtual inheritance
以下代码来自"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;
}
Run Code Online (Sandbox Code Playgroud)
在我的电脑(Windows,VS2010)中,输出为:
1 4 4 8
这是我的问题
1,sizeof(X)= 1
该书说当X类型生成两个实例时,比如说xa和xb.编译在A中插入一个字节,以便xa和xb可以有不同的地址.我不太明白原因.
2,sizeof(Y)= 4
通过使用虚拟继承,我们还有一个额外的虚拟指针吗?我想这可能与多态中的虚拟指针不同.任何人都可以给我Y的内存布局吗?
谢谢!
class Y size(4):
+---
0 | {vbptr}
+---
+--- (virtual base X)
+---
Y::$vbtable@:
0 | 0
1 | 4 (Yd(Y+0)X)
vbi: class offset o.vbptr o.vbte fVtorDisp
X 4 0 4 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |