C++ 仕様では、非仮想クラスのインスタンスに vtable ポインター用のメモリを含めることが許可されていますか? 私がこれを尋ねているのは、同僚が以前 C++ コンパイラを使用した際に次のことが起こったと言ったからです。
class MyClass
{
public:
HeaderStruct header; //This had extra words
BodyStruct message_body;
};
次に、コードを次のように変更し、余分な単語を削除しました。
struct MyClass
{
HeaderStruct header; //This did not have extra words
BodyStruct message_body;
};
これらのタイプはどれも仮想ではなく、仮想のものから派生したものでもありません。したがって、おそらくこの特定のコンパイラは、構造体インスタンスではなく、クラス インスタンスの vptr にメモリを割り当てたという理論がありました。そのため、そのようなコンパイラの動作が仕様によって排除されているかどうかを判断しようとしています。
ありがとう!
ケン