今天发现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》推荐这种方式:





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







































