學習設計模式 C 單例模式

2022-07-12 20:00:13 字數 1073 閱讀 4529

首先展示乙個最簡單的單例模式例子,**如下:

class networkservice  

return m_pinstance;  

}  private:  

// 建構函式設定為私有,禁止使用者另外建立物件  

networkservice();  

static networkservice* m_pinstance;  

};  

這程式看起來非常簡單,而且幾乎沒有什麼問題,然後直接使用networkservice::getinstance()就可以獲得物件指標了。不過這樣的程式實際隱含了個問題:這個唯一的物件應該在什麼時候被釋放呢?

一種方法,我們可以先實現乙個析構自身資源的方法,然後通過getinstance()來獲取物件自身,並呼叫這個方法來進行delete的操作。這樣的方法可行,不過實現方式並不好,至少來說,我們應該讓程式自己在合適的時候來釋放資源,而不是由外面的程式來呼叫這個操作。

那麼是否有更好的辦法來析構單例的物件呢?有,利用靜態變數的特點可以實現這樣的功能。我們知道,程式即將退出時,系統會自動析構所有的全域性變數或靜態變數。而且,所有的類的靜態成員變數也會被自動析構。基於此,我們可以在單例類中定義乙個這樣的靜態成員變數,它存在的目的就是當程式退出時,在析構函式中清除單例類的唯一例項。重新完善的**(參考自其他資料)如下所示,定義了乙個gargo的靜態成員:

class networkservice  

return m_pinstance;  

}  private:  

// 建構函式設定為私有,禁止使用者另外建立物件  

networkservice();  

static networkservice* m_pinstance;  

// 實現私有內嵌類, 用於類networkservice的物件資源的釋放  

class garbo  

}  };  

// 程式執行結束時,系統會呼叫netservice的靜態成員garbo的析構函式,  

// 該系夠函式會刪除netservice類的唯一例項  

static garbo garbo;  

};  

學習設計模式 C 單例模式

首先展示乙個最簡單的單例模式例子,如下 class networkservice return m pinstance private 建構函式設定為私有,禁止使用者另外建立物件 networkservice static networkservice m pinstance 這程式看起來非常簡單,...

設計模式 C 設計模式 單例模式

設計模式 物件導向設計七大原則 設計模式 設計模式概念和分類 設計模式 c 設計模式 單例模式 設計模式 c 設計模式 工廠方法模式 設計模式 c 設計模式 抽象工廠模式 設計模式 c 設計模式 建造者模式 設計模式 c 設計模式 原型模式 作者自用的泛型單例模組 單例模式 singleton pa...

學習設計模式 單例模式

適用於 優點 缺點 1.懶漢式 public class singleton public static synchronized singleton getinstance return uniqueinstance 2.餓漢式 public class singleton public stat...