/*
实现Singleton模式:
设计一个类,只能生成该类的一个实例
*/
#include <stdio.h>
#include <memory>
#include <iostream>
#include <boost/thread/mutex.hpp>
using namespace std;
//版本1:标准实现,为空new一个出来,需要在程序结束时,释放内存
class Singleton
{
public:
static Singleton* getInstance()//定义的应该是一个实例化函数Instance
{
boost::unique_lock
if(NULL == _instance)
{
_instance = new Singleton;
}
return _instance;
}
protected://单例模式不能被实例化,因此需要将构造函数和拷贝构造函数声明为私有或保护的
virtual ~Singleton{}
Singleton(){}
private:
static Singleton* _instance;
};
//版本2:自动垃圾回收,通过声明友元类auto_ptr来改变
class Singleton2
{
public:
static Singleton2* getInstance
{
if(NULL == _instance.get())
{
_instance.reset(Singleton2);
}
return _instance.get();
}
protected:
Singleton2(){}
virtual ~Singleton2{}
private:
friend class auto_ptr<Singleton2>;//声明友元类
//static Singleton2* _instance;
static auto_ptr<Singleton2> _instance;//这里声明的实例就如同智能指针一样
};
//版本3:线程安全。上面的程序只适用于,单线程。多线程会有问题,执行_instance.reset(new T),会同时产生两个新的对象,然后释放一个,
class Singleton3
{
public:
static Singleton3* getInstance()
{
if(NULL == _instance.get())
{
}
}
private:
statin Singleton3* _instance;
};
int main(int argc,char* argv[])
{
getchar();
return 0;
}