单例模式

 单例模式是一种软件设计模式,在它的核心结构中只包含一个被称为单例类的特殊类,通过单例模式可以保证系统中一个类只有一个实例,而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源
 如何保证一个类只有一个实例并且这个实例易于被访问?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。更好的办法是让类自身负责保存它的唯一实例,这个类可以保证没有其他实例被创建,并且它提供一个访问该实例的方法
 实现方式:饿汉模式,懒汉模式

饿汉模式,
 优点:简单,
 缺点:初始化慢

class Singleton
{
public:
	static Singleton* GetInstance()
	{
		return &_sInstance;
	}
private:
	Singleton()
	{}
	Singleton(const Sinleton*)=delete;
	Singleton& operator=(const Singleton&)=delete;
	static Singleton _sInstance;
};
//饿汉,饿在main函数前,这个唯一的对象就已经创建好了
Singleton Singleton::_sInstance;
int main()
{}

懒汉模式
 优点:第一次使用实例对象,,才创建对象
 缺点:复杂

class Singleton
{
public:
	static Singleton* GetInstance()
	{
		if(_spInstance==nullptr)
		{
			_smtx.lock();//如果不加锁,两个线程并行过来,就创建了两个对象了
			if(_spInstance==nullptr)
				_spInctance=new Singleton;
			_smtx.unlock();
		}
		return _spInstance;
	}
private:
	Singleton()=delete;
	Singleton(const Singleton*)=delete;
	static Singleton* _spInstance;
};
Singleton Singleton::*_spInstance=nullptr;
int main()
{}

单例模式的优缺点:
优点:

单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例
缺点:
每次对象请求引用时都要检查是否存在类的实例,需要一些开销,通过使用静态初始化解决此问题。使用单例对象时,编程人员不能使用new关键字实例化对象。如果同意类型的对象总是要在不同的场景发生变化,单例就会引起数据的错误,不能保存彼此的状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值