如何定义一个类,使得这个类最多只能创建一个对象?
分析:
(1)要控制类的对象数目,必须对外隐藏构造函数;
(2)定义instance并初始化为NULL;
(3)当需要使用对象时候,访问instance的值。如果为空则创建对象,并用instance标记,否则直接返回instance对象。
代码实现:
#ifndef _SINGLETON_H_
#define _SINGLETON_H_
#include <iostream>
using namespace std;
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
要想当前类采用单例设计模式,需要将构造函数私有化,同时将单例类模板作为友元。这样在T* Singleton::GetInstance()里可以创建出T对象。
#include <iostream>
#include <string>
#include "Singleton.h"
using namespace std;
class SObject
{
friend class Singleton<SObject>;
SObject(const SObject&);
SObject& operator= (const SObject&);
SObject()
{
}
public:
void print()
{
cout << "this = " << this << endl;
}
};
主函数:
int main()
{
SObject* s = Singleton<SObject>::GetInstance();
SObject* s1 = Singleton<SObject>::GetInstance();
SObject* s2 = Singleton<SObject>::GetInstance();
s->print();
s1->print();
s2->print();
return 0;
}
程序输出:
三个指针都指向同一个内存区域,即程序中只有一个实体存在,单例类模板实现结束。