[C++]C++で書くシングルトンクラス |
2014年12月16日22:00:34 |
|
シンプルに書き表したシングルトンクラスです。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| class Singleton
{
private:
Singleton()
{
}
virtual ~Singleton()
{
}
public:
static Singleton* GetInstance()
{
static Singleton instance;
return &instance;
}
}; |
インスタンスの生成・解放を抑止するためにコンストラクタ・デストラクタは
privateに指定します。
問題はインスタンスを取得するためのGetInstanceメソッドです。
ガーベジコレクションが完備されている言語であれば、初回時のGetInstanceの内部で
newを利用してインスタンスを生成するのが一般的でしょう。
しかし、今回はガーベジコレクションの無いC++です。
newした場合、解放するタイミングを見失ってしまいます。
別途Releaseメソッドを設けるのもいいですがダサいです。
そこでstatic変数を利用してインスタンスを生成するのがいいことに気づきます。
これであればプログラム終了時に自動的に解放されることが約束されます。
参照カウンタ付きのスマートポインタを返すという手段も考えられますが
用途に対して大げさなので、static変数を使うので十分でしょう。
戻り値については、お好みに応じて参照を返すのかポインタを返すのかは
書き換えて頂ければいいのではないかと考えています。 |
|