题目2:Singelton单例模式:设计一个类,只能生成该类的一个实例。

只能生成一个实例的类是实现了Singelton(单例)模式的类型。类是通过构造函数创建实例的,所以要把构造函数设为私有函数,以禁止其他人创建实例。本文提供了几种方式:经典懒汉式、经典饿汉式、多线程式。

#include<iostream>
#include<string>

using namespace std;
<pre class="cpp" name="code"><strong><span style="font-size:14px;">//1.经典懒汉式:懒汉式的特点是延迟加载,实例直到用到的时候才会加载。
//只适用于单线程的情况</span>。</strong>
class SingelTon{
private:
	SingelTon(){}//构造函数
	static SingelTon*instance;//SingelTon的静态属性instance。
public:
	static SingelTon*getInstance()
	{
		if(instance==NULL)
			instance=new SingelTon();//只有在instance为null时才会创建实例,避免重复创建。
		return instance;
	}
};
/*
但是该方法有一定的问题,会存在内存泄漏的问题,new出来的东西始终没有释放。*/


<span style="font-size:14px;"><strong>//2.经典饿汉式饿汉式的特点是一开始就加载了,如果说懒汉式是“时间换空间”,那么饿汉式就是“空间换时间”,因为一开始就创建了实例,所以每次用到的之后直接返回就好了。
//只适用于单线程的情况。
</strong></span>class SingelTon{
private:
	SingelTon(){}//构造函数
public:
	static SingelTon*getInstance()
	{		
/*
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,
以后不再改变,懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。
*/
		static SingelTon instance;
		return & instance;
	}
};
<strong><span style="font-size:14px;">//3. 多线程。
//加上同步锁前后两次判断实例是否存在。</span></strong>
class SingelTon{
private:
	SingelTon(){}//构造函数
	static SingelTon*instance;//SingelTon的静态属性instance。
public:
	static SingelTon*getInstance()
	{
	if(instance==NULL)
	{
		
		 Lock();//借用其它类来实现,如boost.  此处代码需要自己实现
		if(instance==NULL)
			instance=new SingelTon();
		Unlock();
		}
	return instance;
	}
};


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值