掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
デストラクタを仮想関数にしたとき動き(2) (ID:68516)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
virtualをつけない場合、関数をオーバーライドしても現在の型の関数が呼び出されます。 具体的に言うと、上記の例では delete b; をしたときに、A::~A() は仮想関数ではないので、(本当の実体がBなのに)A::~A()が呼び出されます。 B::~B()が呼び出さず、結果的にBの分のメモリーが開放されず、上記のようなエラーが通知されるわけです。 A::~A()をvirtualで定義すれば、エラーはでなくなると思います。 C++でクラスの継承を行う場合、必ずデストラクタはvirtualで宣言するのは鉄則です。 http://www.gcc.ne.jp/~narita/prog/advanced/03/index.html などを参照してください。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.