Code Fix

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

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

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

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

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

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

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

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

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