掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
デストラクタを仮想関数にしたとき動き(2) (ID:68518)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
nowhereさん、ありがとうございます。 メモリリークではなく、不正な処理を行おうとして、アサートされているようなんです。 > C++でクラスの継承を行う場合、必ずデストラクタはvirtualで宣言するのは鉄則です。 そういう原則があるのは承知しています。 この原則を守らず、サブクラスで動的にメモリ確保している場合には、 メモリリークが起きるのは当然だと思います。 ただパフォーマンス等の考慮であえて仮想化しないこともあるでしょうし、 何より、そうしないからといって落ちるのも当然なんでしょうか? επιστημηさん、ありがとうございます。 > ~B() のvirutalを取っ払うとAssertionで引っかからなくなるんですよ。 そうなんです、これがわからないことなんです。 > BをnewしたのにAとしてdeleteするんだからヘンなことが起こるのは当然です。 これ自体は普通の操作ですし、これだけでヘンなこと起きると困りますよ。 ~A() が仮想関数なら ~B()~A() が呼ばれ、そうでなければ ~A() のみが呼ばれるのを期待します。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.