虚拟继承中内存大小占用的问题
[解决办法]
<深入理解C++对象模型>
[解决办法]
方便你理解:
1. 楼主先把 每个类的虚函数去掉,只留空类。
2. 然后每个类加普通函数不加virtual
3. 然后再看你现在这套代码 ->虚继承父类时,首先要通过加入一个虚指针来指向父类,
然后还要包含父类A的所有内容....
[解决办法]
楼主去这里看下就清楚了 http://blog.csdn.net/hackbuteer1/article/details/7883531
[解决办法]
为了保证基类对象的完整性。必须防止子类对象向父类转化时,破坏父类对象。这里不但vprt指针占用空间,而且虚继承还要暂用空间
[解决办法]
看下《深入理解C++对象模型》吧,书上讲的非常清楚。
[解决办法]
因为涉及到虚继承 故而有以下计算内存大小的规则:
sizeof(A) 虚继承下:A是虚函数 本身有一个虚指针 指向自己的虚表 :size为4
加上数据成员 k[3] (内存对齐)故而 结果为8
sizeof(B) 同理 B是虚函数 也有一个虚指针 指向自己的虚表 ,另外又虚继承A 所以得添加一个虚指针指向A 再加上自己的数据成员 故而大小为: sizeof(A)+4+4+4=20
sizeof(C)求法与sizeof(B)类似 sizeof(B)+4+4+4=32
[解决办法]
有虚继承,除了vfptr还有vbptr
A: vfptr + i = 8
B:虚继承 vfptr of B + vbptr of A + j + vfptr of A + k = 20
C: 虚继承 vfptr of C + vbptr of (A B) + i + vfptr of A + k + vfptr of B + vbptr of A + j = 32