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;
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章