質問: c++シングルデザインパターン 最近私はc++のためのシングルトンデザインパターンの実現/実装にぶつかった。それはこのように見えました(私は現実の例からそれを採用しました):// a lot of methods are omitted here class singleton { public: static singleton* getinstance( ); ~singleton( ); private: singleton( ); static singleton* instance; }; この宣言から、インスタンスフィールドはヒープ上で開始されたと推測できます。つまり、メモリ割り当てがあるということです。私にとって全く不明確なのは、正確にメモリの割り当てが解除されるときです。それともバグやメモリリークはありますか?実装に問題があるようです。私の主な質問は、どうやってそれを正しい方法で実装するのですか?
回答: 受け入れられた答えの解決策は重大な欠点を持っています - シングルトンのためのデストラクタはコントロールがmain()関数を出た後に呼ばれます。いくつかの依存オブジェクトがmainの中に割り当てられている場合、本当に問題があるかもしれません。qtアプリケーションにシングルトンを導入しようとしたとき、私はこの問題に遭遇しました。私はすべての設定ダイアログはシングルトンでなければならないと決め、上記のパターンを採用しました。残念なことに、qtのメインクラスqapplicationはmain関数内でスタック上に割り当てられていました、そしてqtはアプリケーションオブジェクトが利用できないときにダイアログの作成/破棄を禁じています。それが、私がヒープ割り当てシングルトンを好む理由です。すべてのシングルトンに明示的なinit()メソッドとterm()メソッドを提供し、それらをmain内で呼び出します。したがって、私はシングルトンの作成/破棄の順序を完全に制御できます。また、誰かがgetinstance()を呼び出したかどうかに関係なく、シングルトンが作成されることを保証します。