---- 整理自狄泰软件唐佐林老师课程
在架构设计时,某些类 在整个系统生命期中 最多只能有一个对象存在(Single Instance)
如何定义一个类,使得这个类最多只能创建一个对象?
#include
#include
using namespace std;
class SObject
{
static SObject* c_instance;
// 将构造函数,拷贝构造函数,赋值函数全部私有化,外部无法创建对象
SObject(const SObject&);
SObject& operator= (const SObject&);
SObject()
{
}
public:
static SObject* GetInstance();
void print()
{
cout << "this = " << this << endl;
}
};
SObject* SObject::c_instance = NULL;
SObject* SObject::GetInstance()
{
if( c_instance == NULL )
{
c_instance = new SObject();
}
return c_instance;
}
int main()
{
SObject* s = SObject::GetInstance();
SObject* s1 = SObject::GetInstance();
SObject* s2 = SObject::GetInstance();
s->print();
s1->print();
s2->print();
return 0;
}

需要使用单例模式时:
将单例模式相关的代码抽取出来,开发单例类模板。
当需要单例类时,直接使用单例类模板。
#ifndef _SINGLETON_H_
#define _SINGLETON_H_
template
<typename T>
class Singleton {
static T* c_instance;
public:
static T* GetInstance();
};
template
<typename T>
T* Singleton<T>::c_instance = NULL;
template
<typename T>
T* Singleton<T>::GetInstance() {
if (c_instance == NULL) {
c_instance = new T();
}
return c_instance;
}
#endif
