C++11 单例模式

C++11之前写个大家都认可的单例真是一个挑战,我见过的方法不下十多种,各有各的手段,每个人都有方法,搞得都不知道如何写一个单例才完美.在这里记一下我用的单例方法,在最新的编译器下是安全的。在c++11之前的标准中并没有规定local static变量的内存模型,所以很多编译器在实现local static变量的时候不是线程安全的。但是新的C++11标准规定了当一个线程正在初始化一个变量的时候,其他线程必须得等到该初始化完成以后才能访问它。所以C++11及以后的版本(如C++14)的多线程下,以下版本的单例都是正确的。

class Singleton
{
public:
    static  Singleton& instance()
    {
        static Singleton instance;
        return instance;
    }

private:
    Singleton(){} ;
    Singleton( const Singleton& ){};
    Singleton& operator=(const Singleton&){} ;
};

int main()
{
    Singleton& instance = Singleton::instance();
    return 0;
}

对于比较老的编译器,linux下目前比较好的方法是使用pthread_once,windows下的用户研究一下boost里的实现,自己搞一个吧.

 

posted on 2016-04-20 17:34  mh-lhw  阅读(297)  评论(0)    收藏  举报

导航