剑指Offer:面试题2 实现Singleton模式

/*
实现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;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值