仮想デストラクタを理解しようとしています。以下は、このページからのコピペです。いつ仮想デストラクタを使用しますか?
ここで、Base のデストラクタが仮想であることを宣言していないことに気付くでしょう。それでは、次のスニペットを見てみましょう。
Base *b = new Derived(); // use b delete b; // Here's the problem!
[...] 基本クラス ポインターを介してインスタンスが削除されないようにする場合は、基本クラスのデストラクタを保護された非仮想にすることができます。そうすることで、コンパイラは基本クラス ポインターで delete を呼び出せなくなります。
保護された非仮想基本クラスのデストラクタを使用することで削除が防止される理由がわかりません。delete
コンパイラは、基本クラスのオブジェクトから呼び出そうとしていると考えていませんか? それと何の関係がprotected
ありますか?