重複の可能性:
仮想のオブジェクト サイズ
仮想継承は派生クラスのサイズを変更しますか? 次のコードを実行しました。ここでは、1 つは仮想的に継承され、もう 1 つは非仮想的に継承された 2 つの派生クラスがあります。
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 ?)
何かを見逃していないかどうかを再度確認するために、クラス内のすべての int を削除して、必要な最小限のコードを試してみました。出力は次のとおりです。
4
4
2 番目の出力は、2 つの派生クラスが同じサイズであることを示しています。最初の実行で vir_der のサイズが 16 になるのはなぜですか? なぜ 12 ではないのですか?