Code Fix

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

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

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

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

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

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

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

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

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