レガシー第9章:多重継承の闇と仮想基底クラス(菱形継承)

メモリレイアウトの解剖、thisポインタ調整オフセット、そして仮想基底クラス(virtual inheritance)の代償

ゲーム開発が大規模化すると、「空を飛べる敵(FlyingEnemy)」と「弾を撃てる敵(ShootingEnemy)」の両方の能力を持った「空飛ぶ砲台ボス(Boss)」を作りたくなる瞬間が必ず訪れます。オブジェクト指向初心者は安易に `class Boss : public FlyingEnemy, public ShootingEnemy` という多重継承(Multiple Inheritance)に手を染めますが、待っているのは共通基底クラスが2重実体化してコンパイラが悲鳴を上げる「菱形継承の死(Diamond of Death)」です。多重継承時の物理メモリ配置、キャストでポインタのアドレス値が勝手にズレる「thisポインタ調整オフセット」、仮想基底クラス(virtual inheritance)の隠れたオーバーヘッドを徹底解剖し、なぜ現代のゲームエンジンが多重継承を原則禁止して「継承より合成(Composition)」を選んだのか、その必然性を解き明かします。


🐻‍❄️ シロクマC++ラボ インタラクティブ学習システム

JavaScriptを実行すると、ブラウザ内インベーダーゲームエミュレータ、メモリマップ可視化、UMLクラス図、対話型解説、理解度クイズが起動します。

インタラクティブ学習を開始する →