有以下一段代码:
class A { public: A() {} ~A() {} }; class B : public A { public: B() {} ~B() {} public: int a; };
若:x=sizeof(A),y=sizeof(B),请问x,y的值分别是多少?
class A中只有两个非virtual函数,因此class A的object为空(非virtual函数并不放在对象中)。但是这个空对象中有一个隐藏的1byte大小,那是被编译器安***去的一个char。这使得这一class的两个objects得以在内存中配置独一无二的地址。因此sizeof(A) = 1
而class B有一个int型的数据成员a,为4字节,因为有了成员,就不需要为了空class A而安插一个char。因此sizeof(B) = 4(安排的1bytes不过是为了让每个对象都有一个独一无二的地址,现在class B object中已经有了数据成员a了,没必要再额外添加1bytes)