それに応じて vtable ポインタを設定する
この部分はほぼ完全に実装定義です。コンパイラが vtables を使用していない可能性があります。複数の vtable ポインター、または vtable ではないものへの 1 つ以上のポインターが存在する場合があります。仮想基本クラスと同様に、多重継承は常に楽しいものです。このメタデータは、別のオブジェクトにコピーできることが保証されていないmemcpy
ため、ポインターは絶対的である必要はありません。オブジェクトポインター自体に相対的なオフセットがそこにある可能性があります。
IIRC では、基本クラス コンストラクターが呼び出され、vtable ポインターが基本クラスに設定され、最初の派生クラス コンストラクターが呼び出されるなどの処理が一般的に行われます。これは、次の場合に何が起こるかに関する仕様の要件を満たすためです。仮想関数はコンストラクターで呼び出されます。私が覚えている限り、標準には「アクションのリスト」はなく、定義された初期化順序だけです。
そのため、実装が何をするかを一般化することはできません。特に、C++ 標準の実装ではないためです。おそらくターゲットプラットフォームで使用すべきではないと考えているため、おそらく正当な理由で「新しい」を除外して手抜きをした場合、それが無視する言語の他のルールを誰が知っていますか。malloc と少しのポインタープッシュで「new」をモックアップすることが可能である場合、一体なぜコンパイラーは単に new を実装しないのでしょうか? コンパイラの専門家が回答できるように、特定のコンパイラとプラットフォームでタグ付けされた質問をする必要があると思います。