单例模式

只能创建出一个对象的类叫单例模式。
单例模式的应用场景:
1、Windows系统的任务管理器。
2、Linux\UNIX系统的日志管理系统。
3、网站的访问计数器。
4、服务器的连接池、线程池、数据池等。
创建单一对象的方法:
1、定义全局的,但不受控制,且有再次创建的风险。
2、专门实现一个类,把类的构造函数调用为私有,然后借助静态成员函数提供一个获取唯一对象的接口。
C++实现单例的思路:
1、禁止类外创建类对象:把构造和拷贝构造设置为私有的。
2、类自己维护一个对象:使用静态指针或静态对象。
3、提供一个获取实例的方法:使用静态成员函数获取静态对象。

懒汉模式:
用静态成员指针来指向唯一的单例对象,只有真正调用单例接口时才创建对象。
优点:什么时候用什么时候创建,节约内存、资源。
缺点:只有在调用获取接口时才创建对象,当多个线程同时调用该接口时,可能会创建出多个对象,存在线程不安全问题。

#include <iostream>
using namespace std;

class Single
{
	static Single* single;
	Single(void) {}
	Single(const Single& that) {}
public:
	static Single* get_single(void)
	{
		if(NULL == single)
		{
			single = new Single;
		}
		return single;
	}
	void show(void)
	{
		cout << single << endl;
	}
};
Single* Single::single = NULL;

void func(Single& t)
{
	cout << &t << endl;
}

int main(int argc,const char* argv[])
{
	Single* s = Single::get_single();
	s->show();
	func(*s);
}

饿汉模式:
将单例对象设置为类的静态成员变量,在main函数开始运行前,实例对象就已经创建完成。
优点:获取单例对象时,线程安全。
缺点:无论是否使用,单例对象都已经创建完成,浪费内存、资源。

#include <iostream>
using namespace std;

class Single
{
	static Single single;
	Single(void)
	{
		cout << this << endl;
		cout << "我是单例构造函数" << endl;
	}
	Single(const Single& that) {}
public:
	static Single& get_single(void)
	{
		return single;
	}
};
Single Single::single;

int main(int argc,const char* argv[])
{
	cout << "hehe" << endl;
	Single& s = Single::get_single();
	cout << &s << endl;
	Single& s1 = Single::get_single();
	cout << &s1 << endl;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值