单例模式,顾名思义,一个类从始至终只有一个实例;
单例实质上就是“自定义静态数据类型”;
单例可应用于唯一资源,常用在资源共享、资源控制情况下,例如:访问数据库,打印机等。
下面这个例子将单例类抽象出来,做成模板基类,子类继承后便形成各自的单例,非常经典。
#include <iostream.h>
//单例基类
template <class T>
class Singleton
{
public:
static T& instance(void)
{
if(0 == instance_p_)
{
//lock
static T derived;
instance_p_ = &derived;
//unlock
}
return *const_cast<T*>(instance_p_);
}
protected:
Singleton() {};
virtual ~Singleton() {};
private:
static volatile T* instance_p_;
};
template <class T>
volatile T* Singleton<T>::instance_p_ = 0; //lint !e956
//实体类1
class Entity: public Singleton<Entity>
{
public:
Entity()
{
//在第instance中static T derived 被实例化
this->var = 10;
cout<<"Singleton Constructor"&