編集:別の質問から、シングルトンに関する多くの質問/回答へのリンクを含む回答を提供しました:シングルトンに関する詳細はこちら:
だから私はスレッドSingletons: good design or a crutch?を読みました。
そして議論は今も激しさを増しています。
私はシングルトンをデザイン パターン (良い面も悪い面も) と考えています。
Singleton の問題はパターンではなく、むしろユーザーにあります (申し訳ありません)。誰もが、そしてその父親は、正しく実装できると考えています (そして、私が行った多くのインタビューから、ほとんどの人は実装できません)。また、誰もが正しいシングルトンを実装できると考えているため、パターンを悪用し、不適切な状況で使用します (グローバル変数をシングルトンに置き換えます!)。
したがって、答える必要がある主な質問は次のとおりです。
- シングルトンを使用する必要がある場合
- シングルトンを正しく実装するにはどうすればよいですか
この記事に対する私の希望は、Singleton をいつ (そしてどのように) 正しく使用するかについての信頼できる情報源を (複数のサイトをグーグル検索して検索するのではなく) 1 か所にまとめることができることです。また、適切な使用法と一般的な悪い実装のリストは、それらが機能しない理由と、適切な実装の場合はその弱点を説明しています。
ボールを転がしてみましょう:
私は手を挙げて、これは私が使用しているものですが、おそらく問題があると言います.
「Scott Myers」の著書「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;
}
};
わかった。いくつかの批判と他の実装をまとめてみましょう。
:-)