ここでの質問は仮想デストラクタに関するものです。したがって、そのような実装が必要な理由の順列には、継承の場合も含める必要があると思います。質問に対する答えは、以下によって異なります。
1)クラスをインスタンス化したくない場合は、プライベートコンストラクタ/デストラクタを使用できます。ただし、インスタンス化は同じクラスの別のメソッドで実行できます。したがって、クラス内でMyDestructor()などの特定のメソッドを使用してデストラクタを呼び出す場合でも、デストラクタをプライベートにすることができます。例:シングルトンデザインパターン。また、この場合、クラスが継承されるのを防ぎます
2)クラスが継承されることを意図している場合、プライベート基本クラスデストラクタは許可されません(コンパイルエラーがスローされます)が、保護された基本クラスデストラクタは継承を許可します
3)保護された仮想デストラクタの継承のタイプ(パブリックおよび保護)により、マルチレベルの継承A-> B-> Cの安全な方法が可能になり、Cのデストラクタが呼び出されたときに、メモリがより適切にクリーンアップされます。
4)メモリがnewを使用して動的に割り当てられる場合、プライベートデストラクタだけでは削除を許可できません(auto_ptrについてはわかりませんが、「プライベート」デストラクタを使用するのと同じ考えに従う必要があると思います)。
特に、そのような実装に気付いていない人がそのようなクラスを使用しようとしている場合は、プライベートデストラクタを使用するとエラーが発生しやすくなる可能性があります。
保護されたパブリックデストラクタはいつでも歓迎され、使用法は上記のニーズによって異なります。
これが明らかになることを願っています。