單例模式是個最常用,最基本的設計模式。下面具體討論下c++單例中的餓漢模式和懶漢模式。
先簡單介紹下餓漢模式和懶漢模式定義:
懶漢模式:當你第一次使用時才建立乙個唯一的例項物件,從而實現延遲載入效果,懶漢模式在第一次使用單例物件時才完成初始化工作,因此可能存在多執行緒競態環境,如果不加鎖會導致重複構造或構造不完全問題。
餓漢模式:不管用不用,程式啟動時就建立乙個唯一的例項物件,餓漢模式不需要加鎖。
先看一段**:
以上**實現的就是懶漢模式,可以看到getsingleton這裡是實際使用到的時候才會初始化,但是這裡的getsingleton建立並非執行緒安全,多執行緒場景下很有可能重複構造或者構造不完全。
再來看餓漢模式:
餓漢模式的關鍵可以看15行,初始化的時候就已經例項化了。但是餓漢模式有個很明顯的缺點,就是提前消耗了記憶體和資源。
所以可以在上面懶漢模式上加上執行緒安全,這樣就可以不提前消耗記憶體和資源,又可以執行緒安全的處理。
**如下:
這裡使用了兩個if判斷,是為了判斷指標是空的時候才加鎖,不然每次getsingleton 都加鎖,會造成沒必要的開銷。
另外c++11 支援靜態變數執行緒安全,所以也可以直接在getsingleton中定義乙個static變數,然後返回就行,編譯的時候需要加編譯選項-std=c++0x
c 單例模式中的懶漢模式和餓漢模式
簡單來講,就是在軟體系統中,乙個類只允許有乙個例項,即只能生成乙個物件。怎麼實現 類的建構函式宣告為private或者protected,以防止被外部生成物件,類的內部儲存乙個static private的該類型別的指標,類的生成物件操作由類的乙個public方法代勞。單例模式又分為懶漢模式和餓漢模...
單例模式 餓漢和懶漢模式
一 單例模式定義 單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,...
懶漢單例模式 和 餓漢單例模式
單例模式 是一種常用的軟體設計模式,在它的核心結構中值包含乙個被稱為單例的特殊類。乙個類只有乙個例項,即乙個類只有乙個物件例項。餓漢單例模式 public class singletondemo5 private singletondemo5 public static final singleto...