仮想デストラクタを含むクラス「base」があり、VTableとそれに対応するVTPRがあり、そこから派生したクラスがあります。
class base {
public:
virtual ~base() {}
};
class der : base {};
main()
{
int a = sizeof(base); // = 4 , fine !
int b = sizeof(der); // = 4 too ?
}
派生クラスも仮想であるため、独自のVPTRがありますが、VPTRを含む基本クラスのサブオブジェクトもあるため、クラス「der」のサイズを8バイトにしないでください。クラス'der'のVPTRのサイズ+クラス'base'のサブオブジェクトのVPTRのサイズ?(sizeof(void *)= 4バイトの場合)。
したがって、基本的に私の質問は次のとおりです。クラス「base」のサブオブジェクトが「der」で作成された場合、別の新しいVPTRがありますか?もしそうなら、なぜ'der'のサイズを計算しているときにそのサイズが追加されないのですか?
誰かがこれを明確にしてくれませんか。