class A
{
int a; 如果没有变量a,则sizeof(A) = 1;这是因为当A a,b;为了表明a和b不是同一块内存,编译器会自动为类添加一个char。
};
class B:virtual public A
{
int b;
};
B b; -> 内存[ int a ]
[ int b ]
[ void *pt] 指向 int a 注意:A类里面没有变量,有些编译器会把A的一个字节继承下来,并进行字节对齐。
如果没有virtual,内存如下:
[ int a ]
[ int b ]
class C:virtual public A
{
int c;
};
class D:public B,public C
{
int d;
};
D d;->内存 [ int a ]
[ int b]
[void *ptr] 指向 int a
[ int c]
[ void *ptr2] 指向 int a
[int d]
如果没有virtual
内存[ int a]
[ int b]
[ int a ]
[ int c ]
[ int d ]