class Singleton
{
public:
static Singleton& Instance()
{
static Singleton instance;
return instance;
}
private:
Singleton();
~Singleton();
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
};
采用effective c++中的方法,这里用到了static Singleton instance;这是一个local static对象,只有在第一次访问Instance()对象时候才会创建。注意这边将构造和析构函数都设为私有并且只声明,因此编译器不会在需要的时候自动再产生。
static Singleton& Instance()
{
if (instance_ == NULL)
{
Lock lock; //基于作用域的加锁,超出作用域,自动调用析构函数解锁
if (instance_ == NULL)
{
instance_ = new Singleton;
}
}
return *instance_;
}
双锁模式,线程安全。
via(http://www.zkt.name/dan-li-mo-shi-singleton-ji-c-shi-xian/)