1. ホーム
  2. c++

[解決済み】デストラクタをprivateにする意味とは?

2022-04-11 15:11:50

質問

デストラクタをprivateにするとどうなるのですか?

どのように解決するのですか?

基本的に、自分のクラスのオブジェクトのライフサイクルを他のクラスに任せたいときや、オブジェクトの破壊を防ぎたいときは、いつでもデストラクタをprivateにすることができます。

例えば、参照カウントのようなことをする場合、オブジェクト(またはフレンドになったマネージャー)に自分への参照数をカウントさせ、その数がゼロになったら削除するようにすることができます。 プライベートなdtorであれば、まだそれへの参照があるときに、他の誰かがそれを削除するのを防ぐことができます。

別の例として、マネージャー(または自分自身)を持つオブジェクトがあり、データベース接続が開かれている、またはファイルが書き込まれているなど、プログラム内の他の条件によって、そのオブジェクトを破壊したり、破壊を拒否したりすることがあるとしたらどうでしょう。 クラスやマネージャに "request_delete" メソッドを用意して、その条件をチェックし、削除するか拒否するかを決定し、その結果をステータスで返すことができます。 これは単に "delete" を呼び出すよりもはるかに柔軟です。