可能重复:
对象大小与虚拟
虚拟继承会改变派生类的大小吗?我执行了以下代码,其中我有两个派生类,一个是虚拟继承的,另一个是非虚拟继承的:
class A {
public:
int a;
virtual void a1();
};
class non_vir_der: public A{
public:
int c;
virtual void aa();
};
class vir_der: public virtual A{
public:
int d;
virtual void bb();
};
int main()
{
cout<<sizeof(non_vir_der)<<"\n";
cout<<sizeof(vir_der)<<"\n";
return 0;
}
输出:
12(imo:4(int a)+ 4(int c)+ 4(vir ptr))
16(额外 4 个?)
为了再次检查我是否遗漏了什么,我尝试了所需的最少代码,方法是删除类中的所有整数,输出为:
4
4
第二个输出表明两个派生类的大小相同。为什么第一次运行时vir_der的大小是16,为什么不是12?