以下のコード スニペットを検討してください。
class A
{
};
class B:public virtual A
{
};
class C:public virtual A
{
};
class D:public B,public C
{
};
int main()
{
cout<<sizeof(A)<<" "<<sizeof(B)<<" "<<sizeof(C)<<" "<<sizeof(D));
return 0;
}
私は次のように出力を得ています:
1 4 4 8
クラスB
とのサイズはC
、 の作成により 4 バイトですvptr
。virtual table
がクラス用に作成されB
ているということC
ですか? どうA
ですか?
一般に、コンパイラvirtual table
がダイヤモンドの継承を正確に作成するのはどのクラスですか?
仮想テーブルを作成するための決定はコンパイラ固有ですか?
上記の例または他のより良い例の文脈で答えてください。