C++ FAQ から:
[11.4] クラスのデストラクタをオーバーロードできますか? いいえ。
これは、戻り値の型、引数の型、または引数の数を変更できないことを意味します。私は単語の構文について髪を分割しているかもしれませんが、親のデストラクタをオーバーライドすることは可能ですか?
class Child : public Parent {
public:
virtual Parent::~Parent() {
// New definition
}
};
さらに言えば、再帰的に行うのですか?
class Grandchild : public Child {
public:
Child::Parent::~Parent() {
// An even newer definition
}
};
これと関連する投稿を読んだことがありますが、デストラクタは継承されず、オーバーライドできないためだと思いますが、明示的に述べられているのを見たことがありません。
編集:親のデストラクタをオーバーライドしたいという事実を反映するようにこれを変更しました。子と孫が ~Parent() をオーバーライドしていることに注意してください。
私がこれを行っている主な理由は、破棄される方法を変更しながら親のインターフェイスを維持することです (子クラスの理由全体)。作成されたすべての親を管理する何か他のものを用意し、後で選択したときにそれらのデストラクタを明示的に呼び出します。