ちょっと好奇心から私はコンパイラがスタックオーバーフローで終わる無限ループを呼び出すのではなく警告を出すかどうかを調べるために、以下のようなことをしようとしました。私は、通常の関数やメソッドを呼び出すのとは異なる振る舞いがあるかもしれないと考えました。しかし、そうではありません。私は明示的に基本クラスのデストラクタを呼び出してthis
演算子を使用しているので、特別な説明はありますか、通常の関数呼び出しとして処理されているだけですか?コンパイラは、派生デストラクタで基本クラスのデストラクタ呼び出しをどのように処理しますか?
例:M.Mさんのコメント@
class A {
virtual ~A();
};
class B : A {
virtual ~B() { this->~A(); }
};
'virtual void〜A();' - これはコンパイルしないでください。デストラクタは何も返さず、通常のメソッド名にはtildaを含めることはできません。 – yeputons
@yeputons right、sry、typo –
'〜A()'を2回呼び出すと未定義の動作が発生します( 'B()'の本体が終了した時点で暗黙の呼び出しがあるので) –