C++でのシングルトン

2014年3月4日

C++では、本当にシングルトンを記述する方法が難しいです。
以下がよく、巷に出ているシングルトンの作成方法です。

class Singleton : private boost::noncopyable {
public :
    static Singleton *instance(){
        if (instance_ == NULL) {
            instance_ = new Singleton();
        }
        return instance_;
    }
private:
    Singleton();
    static Singleton *instance_;
};

さて、このシングルトン、問題があります。どんな時でしょうか?
ち、ち、ち、ぽーん!
はい。時間切れ。
正解は、生成時にinstance関数が複数スレッドから呼ばれるとシングルトンなのに
2つのオブジェクトが生成される可能性があるのでした。
最底辺なので、これを理解するのにどれだけ時間を要したか。
そして今も理解していない!!
やっぱ、プログラマ干されて当たり前ですな。
最近、偉そうに解説してすみません。なんか面白いネタ考えておきます。

c++

Posted by koheizi