Code Fix

上級仮想デストラクタが無いと派生クラスのデストラクタが呼ばれない理由 › パターン1

仮想デストラクタが無いと派生クラスのデストラクタが呼ばれない理由

基底クラスのポインタ経由で派生クラスのオブジェクトをdeleteしたとき、基底クラスのデストラクタが仮想(virtual)でないと、派生クラス側のデストラクタが呼ばれないバグです。

 1  #include <iostream>
 2  class Base {
 3  public:
 4      ~Base() { std::cout << "Base destroyed" << std::endl; }
 5  };
 6  class Derived : public Base {
 7  public:
 8      ~Derived() { std::cout << "Derived destroyed" << std::endl; }
 9  };
10  int main() {
11      ________ b = new Derived();
            ^
12      delete b;
13      return 0;
14  }
出力: Base destroyed(Derived destroyedが呼ばれない)期待: Derived destroyed → Base destroyed

空欄を埋めてコンパイル・実行を通す

広告
広告スロット(未設定)

仮想デストラクタが無いと派生クラスのデストラクタが呼ばれない理由

このエラーの解説と類題をまとめて見る →

広告
広告スロット(未設定)