72. 题目:设计一个类,我们只能生成该类的一个实例。
分析:设计模式中的单例模式,这里给出单例模式的几种情形下的C++实现。
普通的单例模式:
class CSingleton
{
public:
static CSingleton* getInstance()
{
if (mInstance == NULL)
mInstance = new CSingleton();
return mInstance;
}
private:
CSingleton(){}
static CSingleton* mInstance;
};
增加删除操作的单例模式:
class CSingleton
{
public:
static CSingleton* getInstance()
{
if (mInstance == NULL)
mInstance = new CSingleton();
return mInstance;
}
private:
CSingleton(){}
static CSingleton* mInstance;
private:
class Deleter
{
public:
~Deleter()
{
delete CSingleton::mInstance;
}
};
private:
static Deleter deleter;
};
增加锁的单例模式:
class CSingleton
{
public:
static CSingleton* getInstance()
{
Lock();
if (mInstance == NULL)
mInstance = new CSingleton();
unLock();
return mInstance;
}
private:
CSingleton(){}
static CSingleton* mInstance;
private:
class Deleter
{
public:
~Deleter()
{
delete CSingleton::mInstance;
}
};
private:
static Deleter deleter;
};
饿汉模式:
class SingletonStatic
{
private:
static const SingletonStatic* mInstance;
SingletonStatic(){};
public:
static const SingletonStatic* getInstance()
{
return mInstance;
}
};
const SingletonStatic* SingletonStatic::mInstance = new SingletonStatic();