C 單件模式學習筆記

2021-05-27 15:24:57 字數 668 閱讀 5996

單件模式是設計模式中很常用的一種模式。儘管本人是個菜鳥,經驗也不足,但還是喜歡把學到的應用到工作專案當中。廢話不多說了

以前在書上看過一些單件模式方面的資料,沒過腦子,就直接把**敲進去。

一直也都沒有仔細的考慮,最近才發現上圖的**,在一下情況下就會出現異常

singleton*  psingleton = singleton::getinstance();

delete psingleton;  // 問題就在這句

當釋放 psingleton 靜態記憶體空間時,程式出現異常,原因是由於 singleton   的析構函式裡面有 delete pinstance; 這句,因為 pinstance 也是 singleton 型別指標,因此會出現死迴圈,不停地呼叫 ~singleton();

那麼我該如何正確的刪除靜態例項,清除其所占用記憶體空間; 仔細想想,我們知道,程式在結束的時候,系統會自動析構所有的全域性變數。事實上,系統也會析構所有的類的靜態成員變數,就像這些靜態成員也是全域性變數一樣。利用這個特徵,我們可以在單例類中定義乙個這樣的靜態成員例項(而非指標),由於是靜態的成員,還必須在類外部定義,否則連線錯誤;還有一種方法是在 getinstance() 函式中定義。修改為如下:

這樣,**也很簡潔,析構也省了,錯誤沒有了,世界清淨多了。

設計模式學習筆記之 單件模式

單件模式的關鍵是確保只有乙個例項。1 經典單件模式 又稱懶漢模式 public class singleton public static singleton getinstance return uniquesingleton 特點 1 構造方法是私有的,僅在singleton類內部才可以被呼叫 ...

學習筆記 設計模式 4 單件模式

在乙個大型系統中,不可避免的會出現只能存在乙個的類,比如執行緒池,對話方塊,配置設定等等,如果參與開發系統的人不止乙個 這是很常見的場景 就無法保證不會有兩個人同時在自己的 裡例項化了這個只能存在乙個的類。下面介紹的單件模式 單例模式 就可以在根源 只能存在乙個的類 上避免出現上面的問題。首先介紹一...

設計模式學習筆記(十四 單件模式)

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。這就是單件模式的定義。在某些情況下,我們可能需要某個類只能建立乙個物件,即不讓使用者用該類例項化出多於兩個的例項。例如,在乙個公文管理系統中,公文類的例項 公文檔案 需要將公章類的例項作為自己的乙個成員,以表明自己是乙個有效的公文檔案,那麼系統...