32位机器上,有三个类A B C定义如下, 请确定sizeof(A) sizeof(B) sizeof(C)的大小顺序.
struct A{ A() {} ~A() {} int m1; int m2; }; struct B:A{ B() {} ~B() {} int m1; char m2; static char m3; }; struct C{ C() {} virtual~C() {} int m1; short m2; };类的大小只与成员变量(非static数据成员变量)和虚函数指针有关,还要考虑到对齐. 那么类A的大小是8个字节;
类B继承类A,在类A的8个字节基础上,再加上B自己的大小8字节,所以类B大小是16个字节;
类C是4个字节+4个字节(考虑对齐)+4个字节(指向虚析构函数的指针)=12个字节
class A { int i; union U { char buff[13]; int i; }u; void foo() { } typedef char* (*f)(void*); enum{red, green, blue} color; }a; 实例化class A int i占4个字节 union U实例化为u占取16个字节(char数组占13个字节,但因为最大类型为int,所以占取只能为4字节的整数倍即最小16字节) 空函数不占取字节 未实例化指针不占取字节 枚举类型占取4个字节 总共占取4+16+4=24个字节