のは、私たちがフォローのようなコードがあるとしましょう:コールは、基本クラスの仮想デストラクタから子孫のメソッドをオーバーライド
class Base{
public:
virtual ~Base(){PutStat();};
virtual void PutStat(){/* maybe do nothing */};
};
class Desend : public Base{
public:
void PutStat() override{/* do something */};
};
方法PutStatは、いくつかの統計を表示します。 Baseから継承したDescendantsのすべてのインスタンスが、破壊中に自動的に統計メッセージを出力することを願っています。
stat-messageを出力するのが一般的な機能のようですので、PutStatをBaseで一度だけ呼び出す方が、各子孫のPutStatを別々に呼び出すよりも妥当だと思います。
残念ながら、Baseのデストラクタが仮想であるため、オーバーライドされていないPutSatが呼び出されます。
したがって、上書きされたバージョンのPutStatをBaseデストラクタで呼び出す方法。
できません。派生クラスのデストラクタは既に実行されているので、派生クラスのメンバ関数が行うことはできません。 –
できません。基本クラスのデストラクタが呼び出される時点で、派生オブジェクトはもはや存在せず、 'PutStat'の基本クラスバージョンを呼び出すことになります – MikeMB
そして、デストラクタは仮想のbtwではありません。 – MikeMB