今天发现singleton的设计模式还有多种不同的实现方法,以前一直这样使用:
static Singleton *GetInstance()
{
if (NULL == instance)
{
instance = new Singleton();
}
return instance;
}
这样使用不好之处就是得找个地方delete。
《Modern C++ Design》推荐这种方式:
static Singleton *GetInstance()
{
static Singleton singleton;
return &singleton
}
这种局部static变量只有在函数被调用的第一次才被创建,随着程序的结束而结束。
另外,还有在程序加载时就创建实例的实现方式,该实现使用了静态全局变量:
class Singleton
{
private:
static Singleton instance;
Singleton(void)
{
}
public:
static Singleton& GetInstance()
{
return instance;
}
};

Singleton Singleton::instance;
这种实例成员还可以换成指针成员:
class Singleton
{
private:
static Singleton* instance; //申明
Singleton(void)
{
instance = this;
}
public:
static Singleton* GetInstance()
{
return instance;
}
};

Singleton::instance = NULL; //定义

//全局
Singleton g_Instance;
线程安全问题还是同意在设计上去避免。








《Modern C++ Design》推荐这种方式:





另外,还有在程序加载时就创建实例的实现方式,该实现使用了静态全局变量:







































