關於C 單例模式

2021-06-25 14:18:50 字數 1535 閱讀 5500

單例模式簡介:

單例模式保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點,通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。

為什麼要用單例?

對於系統中的某些類來說,只有乙個

例項很重要,例如,乙個系統中可以存在多個列印任務,但是只能有乙個正在工作的任務;乙個系統只能有乙個視窗管理器或檔案系統;乙個系統只能有乙個計時工具或id(序號)生成器。如在windows中就只能開啟乙個任務管理器。如果不使用機制對視窗物件進行唯一化,將彈出多個視窗,如果這些視窗顯示的內容完全一致,則是重複物件,浪費記憶體資源;如果這些視窗顯示的內容不一致,則意味著在某一瞬間系統有多個狀態,與實際不符,也會給使用者帶來誤解,不知道哪乙個才是真實的狀態。因此有時確保系統中某個物件的唯一性即乙個類只能有乙個例項非常重要。

而單例模式是讓類自身負責儲存它的唯一例項,這個類保證沒有其他例項被建立,也就是說乙個類只能有乙個例項,然後它提供給系統乙個可以訪問該例項的介面,我們可以使用該介面來根據專案需要建立自己要定義的單例項。

單例模式實現的基本要素:

1.類定義中含有乙個該類的靜態私有物件

2.提供乙個訪問點給外部訪問

3.具有私有的建構函式

singleton.h

#include using namespace std;

class singleton

singleton.cpp

singleton *singleton::m_pinstance=null;

singleton *singleton::getinstance()

return m_pinstance;

}

有了這樣的單例項,我們便可以在是用該函式介面來建立單例物件。網上看了下有人說對單例物件的銷毀,貼下** 大家也了解下

程式在結束的時候,系統會自動析構所有的全域性變數。事實上,系統也會析構所有的類的靜態成員變數,就像這些靜態成員也是全域性變數一樣。利用這個特徵,我們可以在單例類中定義乙個這樣的靜態成員變數,而它的唯一工作就是在析構函式中刪除單例類的例項。

class csingleton

static csingleton *m_pinstance;

class cgarbo //它的唯一工作就是在析構函式中刪除csingleton的例項

};static cgarbo garbo; //定義乙個靜態成員變數,程式結束時,系統會自動呼叫它的析構函式

public:

static csingleton * getinstance()

};

使用這種方法釋放單例物件有以下特徵:

在單例類內部定義專有的巢狀類;

在單例類內定義私有的專門用於釋放的靜態成員;

利用程式在結束時析構全域性變數的特性,選擇最終的釋放時機;

使用單例的**不需要任何操作,不必關心物件的釋放。

C 單例模式

include using namespace std 單例類的c 實現 class singleton 構造方法實現 singleton singleton void singleton setvar int var main int main int argc,char argv return ...

C 單例模式

實現方式一 include template typename t class singleton boost noncopyable static void init private static pthread once t ponce statict value template typena...

C 單例模式

效率有點低,但是還算安全的單例模式,靜態成員實現方式 class singleton public static singleton getinstance singleton singleton getinstance unlock return m instance 內部靜態例項的懶漢模式,c ...