編集:別の質問から私はシングルトンに関する多くの質問/回答へのリンクを含む回答を提供しました:シングルトンの詳細についてはこちら:
だから私はシングルトンのスレッドを読んだ:良いデザインか松葉杖か?
そして、議論はまだ激化しています。
シングルトンをデザインパターン(良い点と悪い点)と見なしています。
シングルトンの問題はパターンではなく、むしろユーザー(すみません)です。誰もが彼らの父親は、それらを正しく実装できると考えています(そして、私が行った多くのインタビューから、ほとんどの人はそうすることができません)。また、誰もが正しいシングルトンを実装できると考えているため、パターンを悪用し、不適切な状況で使用します(グローバル変数をシングルトンに置き換えます!)。
したがって、回答する必要がある主な質問は次のとおりです。
- いつシングルトンを使うべきか
- シングルトンをどのように正しく実装しますか
この記事に対する私の期待は、シングルトンを正しく使用するための信頼できる情報源(および複数のサイトを検索する必要があるのではなく)を1か所にまとめることができることです。また、アンチユーセージのリストと、それらが機能しない理由を説明する一般的な不良実装のリストと、適切な実装の弱点も適切です。
だからボールを転がしてください:
私は手を挙げて、これが私が使うものだと言いますが、おそらく問題があります。
私は彼の本「Effective C ++」の主題の「スコットマイヤーズ」の扱いが好きです
シングルトンを使用するのに適した状況(多くはない):
- ロギングフレームワーク
- スレッドリサイクルプール
/*
* C++ Singleton
* Limitation: Single Threaded Design
* See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
* For problems associated with locking in multi threaded applications
*
* Limitation:
* If you use this Singleton (A) within a destructor of another Singleton (B)
* This Singleton (A) must be fully constructed before the constructor of (B)
* is called.
*/
class MySingleton
{
private:
// Private Constructor
MySingleton();
// Stop the compiler generating methods of copy the object
MySingleton(MySingleton const& copy); // Not Implemented
MySingleton& operator=(MySingleton const& copy); // Not Implemented
public:
static MySingleton& getInstance()
{
// The only instance
// Guaranteed to be lazy initialized
// Guaranteed that it will be destroyed correctly
static MySingleton instance;
return instance;
}
};
OK。いくつかの批判と他の実装をまとめてみましょう。
:-)