掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
派生元クラスでの this の扱いについて (ID:54081)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
解決マークがつきましたが、蛇足。 delete this; とするから難しくみえるのであって、ふつーに考えればいいのです。 struct drawable { ... virtual ~drawable(); virtual void Draw()=0; }; struct rectangle : public drawable { ... }; struct circle : public drawable { ... }; void DrawIt(drawable* p) { p->Draw(); } void RemoveIt(drawable* p) { delete p; } なんてコードはごく普通に使うと思うのですが、この delete p; で 正しく派生クラス (rectangle, circle) のインスタンスが処分されるためには 基底クラス (drawable) のデストラクタが virtual である必要があります。 delete p; と delete this; ではインスタンスが破棄される経路自体には大差ありません。 # delete this; の後に(暗黙にも)メンバ変数・関数(vptr/vtbl) を触るとバグります。 # が、まあそれは delete p; でも同じこと。 提示のコードでは most-derived-class のデストラクタを起動するためのロジックが ・デストラクタ自身にある ・Delete() 関数にある か、の違いということになります。 常に派生して使うのであればデストラクタが virtual なほうが使いやすいでしょう。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.