一般的には仮想だけで十分だと思います。
派生クラスに独自のデストラクタを強制的に実装する以外に、純粋な仮想にする理由は他にありますか? つまり、クラスのコンストラクターに何かを割り当てる場合は、クラスが派生しているかどうかにかかわらず、独自のデストラクタを実装する必要があります。
私がすでに知っているように、答えとしてはカウントされません。クラスの抽象化が必要で、純粋な仮想関数がない場合は、デストラクタに任せてください。
もう少し使い道は?
一般的には仮想だけで十分だと思います。
派生クラスに独自のデストラクタを強制的に実装する以外に、純粋な仮想にする理由は他にありますか? つまり、クラスのコンストラクターに何かを割り当てる場合は、クラスが派生しているかどうかにかかわらず、独自のデストラクタを実装する必要があります。
私がすでに知っているように、答えとしてはカウントされません。クラスの抽象化が必要で、純粋な仮想関数がない場合は、デストラクタに任せてください。
もう少し使い道は?
クラス抽象が必要で、純粋仮想関数がない場合は、デストラクタに任せてください。
実際、これ以上はないと思います。純粋な仮想デストラクタが行うのは、クラス全体を抽象化することだけです。純粋な仮想デストラクタと非純粋な仮想デストラクタの実装を提供する必要があります。派生クラスのデストラクタは仮想であり、仮想デストラクタのみです。
基本的に、クラスにすでにいくつかの純粋仮想関数がある場合、その動作は仮想および純粋仮想デストラクタと同等になります。
いいえ。基本クラスが何かを割り当てた場合、それを解放する責任があります。
さらに、派生クラスが何も割り当てない場合、それらにダミーの dtor を書くように強制しても意味がありません。
理想的には、言語には、デストラクタを定義したり純粋にしたりすることなく、抽象クラスでデストラクタが仮想であることを (暗黙的または非明示的に) 保証する方法が必要です。しかし、そうではありません。
したがって、選択は次のとおりです。それを純粋にして、各派生クラスで定義する負担を負うか、そうではなく、抽象クラスで定義する負担を負うかです。後者は作業が少なく、コードも短いので、私はそれを選びます。
抽象クラスが純粋なインターフェイスであり、データ メンバーがない場合は、dtor を純粋な仮想にすることでうまくいく可能性があります。非常に多くの有能なプログラマーが仮想デストラクタを作成することをまったく忘れているのを見てきたので、私自身はそれを好みます。仮想メソッドを含む派生クラスを作成するときでさえもです。したがって、将来のメンテナンスの頭痛の種を最小限に抑えるために、純粋にそれを行います。