C++单例模式

单例模式是面试官非常爱考的一种设计模式。当我第一次接触的时候,感觉这是个什么鬼?不过自己还是坚持下来,下面是我关于这个模式的一些思路和想法。
1.单例模式的概念:

  • 通俗点来说,一个类只能创建一个对象即为单例模式。
    在很多时候,为了更安全,可靠的访问某个服务器的话,就必须要设计出一个独立的对象去访问它,而其他对象则不能够进行访问。
    单例模式的实现主要有两种方式:饿汉模式和懒汉模式。

2.饿汉模式
不管你用或者不用,程序启动的时候就会创建唯一的一个对象。
如果这个单例对象在多线程高并发环境下频繁使用,性能要求较高,那么显然使用饿汉模式来避免资源竞争,提高响应速度更好。

class Singleton
{
	public:
	{
		static Singleton* GetInstance()
		{
			return &instance;
		}
	}
	private:
	{
		Singleton(){};
		
		Singleton(Singleton conat&)
		{}
		
		Singleton& operator=(singleton const&)
		{}
		
		static Singleton instance;
	}
};
Singleton Singleton::instance;

3.懒汉模式
如果单例对象构造时或者占用很大的资源,比如加载插件,初始化网络连接,读取文件等,又或者该对象程序运行时不会用到。那么如果在程序一开始就进行初始化的话,就会导致启动的时候非常的缓慢。这种情况用懒汉模式更好。(延迟加载)

#include<iostream>
#include<mutex>

class Singleton
{
	public:
	static Singleton* GetInstance()
	{
		if(nullptr == instance)
		{
		 // 注意这里一定要使用Double-Check的方式加锁,才能保证效率和线程安全
			m_mtx.lock();
			if(nullptr == instance)
			{
				instance == new Singleton();
			}
			m_mtx.unlock();
		}
		return instance;
	}
	private:  
		Singleton(){};
		Singleton(Singleton const&)
		{}
		
		Singleton& operator=(Singleton const&)
		{}
		
    	static Singleton* m_instance;  
    	static mutex m_mtx;
   	 	  
};
Singleton* Singleton::m_pInstance = nullptr;
mutex Singleton::m_mtx;
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值