GOF 着作中对 Singleton Pattern 的描述为:保证一个class只有一个实体(Instance),有人觉得 GOF 范例在判断 Instance 是否
已建立降低了效率,有人就把他改为以下的方式来建立
Singleton *Singleton_create()
{
static Singleton m_Instatnce;
return &m_Instatnce;
}
但在多执行绪环境下有 memory leak 的疑虑,若还要加上一大堆执行绪的同步控制,则上面那个高效率的方法就不见了...:(
有两个方法可以解决,一种另弄一个类别来帮忙,如以下的简单示意:
class Singleton
{
static Singleton *_obj; // 存放建构出来的 Singleton 唯一的物件
public:
static Singleton *Create(void);
friend class Factory;
};
class SingletonHelp
{
public:
void SingletonHelp(Singleton **Obj)
{
/* 加一些同步控制....*/
*Obj = new Singleton();
}
};
Singleton::Create(void)
{
static SingletonHelp _Temp(&_obj);
return _obj;
}
但总觉得用了一些非正派的技巧,没法确定是否能完全如己所愿。
另一种则是以下的介绍的范例,藉由函数指标可替换的特性,完全符合 C++ 的规范内:
/*----------- ..
访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容