0

仮想メカニズムの場合、基本クラスと派生クラスで同じメソッド名を使用する必要があります。ただし、仮想デストラクタの場合、名前は異なる場合があります。

仮想メカニズム(V-Ptr、V-Table)が異なる名前のデストラクタをどのようにサポート/動作するかを誰かが説明できますか?

4

3 に答える 3

1

virtualデストラクタは、仮想関数とは異なる方法で処理されます。呼び出し時に最も派生したクラスのオーバーライドのみが呼び出されるメソッドとは対照的に、継承チェーン内のすべてのデストラクタは、オブジェクトが破棄されるときに呼び出されます。

デストラクタは、基本クラスへのポインタを介してオブジェクトを削除する場合に存在しなければならないvirtualという事実を除いて、本質的に非仮想デストラクタと同じです(そうでない場合は未定義の動作です)。

于 2012-10-09T09:41:57.327 に答える
0

クラスは 1 つのデストラクタしか持てないため、同じ名前である必要はありません。クラスごとに 1 つのデストラクタしかないため、どのデストラクタを識別するために名前を使用しません。

于 2012-10-09T09:41:14.243 に答える
0

正しいデストラクタを呼び出すことができることを保証する限り、それは実装次第です。これを行う手段は、一般的な仮想メカニズムの一部である場合もあれば、デストラクタ専用の特別なメカニズムである場合もあります。

とにかく、関数名が vtables に表示されないことが予想されます。コンパイラは、各クラスの各仮想関数のテーブルにオフセットを割り当てるだけです。したがって、デストラクタに名前があるかどうか、もしそうならそれが何であるかという問題は関係ありません。

于 2012-10-09T09:53:20.113 に答える