Code Fix

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

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

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

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

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

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

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

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

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