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里的实现,自己搞一个吧.
浙公网安备 33010602011771号