次の 2 つの構造体を検討してください。
struct A
{
// A bunch of standard layout data
};
struct B:public A
{
// Other data
};
そして、オブジェクト
B foo;
sizeof(A) がコンパイラ間で異ならない場合、パッキングは同じであり、B は仮想メソッドを追加しません。 Windows x86 の gcc または msvc を使用してコンパイルする場合、foo は &foo に相対する同じアドレスに A メンバーを持ちます。 x86-64 プラットフォーム?
編集: 継承を実装する最善の方法は、B の前に A を配置することであることに気付きました。少なくとも GCC は、A のコンテンツの後に B のコンテンツを置きます。