用virtual继承以后多出来那些究竟是什么鬼东西啊?
ed9er 2001-02-22 05:29:00 sizeof增加了4字节,按地址找过去,发现看不懂,然后用菱形的样式做了个继承,
class Base {
public :
char p[0x100];
};
class Child1 : virtual public Base {};
class Child2 : virtual public Base {};
class MI : public Child1, public Child2 {};
void main() {
Base b; Child1 c1; Child2 c2; MI mi;
}
然后再跑,sizeof() : mi is 0x108 bytes,c1,c2 is 0x104 bytes, b is 0x100 bytes,看头,c1、c2都多了一个指针,mi多了两个,四个指针的值连续排列,间隔是0x0c bytes :
c1 : 0047201c
c2 : 00472028
mi : 00472034
00472040
0047201C 00 00 00 00 04 00 00 00 00 00 00 00 ............
00472028 00 00 00 00 04 00 00 00 00 00 00 00 ............
00472034 00 00 00 00 04 00 00 00 00 00 00 00 ............
00472040 00 00 00 00 08 00 00 00 00 00 00 00 ............
请问这些东西有什么用?因为virtual继承对子对象的重叠放置和成员函数调用的确定(假设没有virtual方法)是编译时就已经完成了的,跟这个应该没有关系,这个东西有点象vtable,但含义搞不懂,中间那个DWORD好象是个偏移量,其他的呢?是不是reserved了的?