[语言类]SizeOf(Class)

来源:互联网 发布:粒子群算法工具箱下载 编辑:程序博客网 时间:2024/04/26 06:25

 对一个空类A来说,sizeof(A) =?

 

Class A

{}

Sizof(A) = 1;  (VC)

 

对于空类,标准规定插入一个char;但其作为基类的时候,遵循最小化原则,大小为0.

 

所以:


class X{};
class Y: public virtual X{};
class Z: public virtual X{};
class A: public Y, public Z{};


cout<<sizeof(X)<<endl;
cout<<sizeof(Y)<<endl;
cout<<sizeof(Z)<<endl;
cout<<sizeof(A)<<endl;

VC上的结果为1,4,4,8

如果修改为 class X{char a;};
VC的结果1,5,5,9;   
如果修改为class X{char a;int b;};
VC的结果为8,12,12,16

 

我的理解是虚继承时子类需要维护一个Vptr的指针,所以即使虚基类为空,子类也会为vptr分配一个4字节(可能与各编译器有关)大小的空间。