單例模式沒啥好說解說的,這個模式太經典了,以至於即使你沒有接觸過設計模式也一定聽過單例模式的大名。網上關於單例模式的例子有很多,這裡就算做乙個歸納總結吧!
單例模式的定義:保證乙個類僅有乙個例項,並提供乙個該例項的全域性訪問點。
uml結構圖如下:
網路上常見的單例模式實現,有以下幾種:
//類的宣告
class singleton
//建構函式
singleton(singleton const &);//拷貝建構函式,無需實現
singleton & operator = (const singleton &);//賦值建構函式,無需實現
public:
static singleton* getinstance();
static singleton* m_instance;
};singleton* singleton::m_instance = nullptr;
//1,執行緒非安全版本
singleton* singleton::getinstance()
return m_instance;
}//2,執行緒安全版本,但鎖的代價過高(如果不是高頻訪問,效率可以接受)
singleton* singleton::getinstance()
return m_instance;
}//3,雙檢查鎖,但由於記憶體讀寫reorder不安全(這裡涉及到編譯器內部的問題,應用程式開發者
//不用去深究這個問題,知道這種方式不安全即可。)
singleton* singleton::getinstance()
}return m_instance;
}//4,c++11版本之後的跨平台實現 (volatile其實就是解決了上面的reorder不安全的問題)
std::atomicsingleton::m_instance;
std::mutex singleton::m_mutex;
singleton* singleton::getinstance()
}return tmp;
}
這裡也沒啥好總結的,如果在程式中遇到了需要使用單例模式的情況,選擇上面合適的實現即可。 常用設計模式之 單例模式
概念 從字面意思不難理解,單例模式就是指某個類僅能建立乙個例項。實現 實現單例模式常有兩個誤區 一 看見單例時,最容易聯想到的就是把乙個類的所有屬性以及方法均設為靜態的。初聽上去,這種方法是挺不錯的,但靜態屬性 方法是在類載入時就初始化了,得到自己的空間,這不是我們能夠控制的,當我們程式中有大量這種...
C 常用的設計模式之單例模式
最近在看設計模式,同時在學習過程中也檢視了大量的部落格,也查閱了很多關於設計模式的一些文章的,在此,特別記錄下我的學習筆記,加深自己對設計模式理解,同時可以給一些初學設計模式的朋友提供查閱的路徑。單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系...
C 設計模式之單例模式
在遊戲開發過程中,我們時常會遇到單例模式的運用場景。比如你遊戲當中的最終boss,你希望你的boss只能有乙個,所以這裡你就可以用單例模式 那麼什麼是單例模式呢?看下面的 分析。include include using namespace std class singleton public st...