C 中單例模式的兩種簡單實現

2021-06-18 01:08:06 字數 1458 閱讀 2425

單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例類的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。

今天看到這個東西了,就查了些資料。想寫的很完善也不是很容易。總結了以下別人的實現方法,挑了兩種比較簡單的,供和我一樣的新手學習。

廢話不多說,直接貼**。

第一種實現:

class singleton

; singleton(const singleton &) {};

singleton & operator= (const singleton &) {};

public:

static singleton *getinstance();

static void destroyinstance();

private:

static singleton *m_pinstance;

};singleton * singleton::m_pinstance = null;

singleton * singleton::getinstance()

void singleton::destroyinstance()

第二種實現:

class singleton

; singleton(const singleton &) {};

singleton & operator= (const singleton &) {};

public:

static singleton *getinstance();

static void destroyinstance();

private:

static singleton *m_pinstance;

}; singleton * singleton::m_pinstance = new singleton();

singleton * singleton::getinstance()

void singleton::destroyinstance()

第一種實現是在需要的時候建立例項,就是所謂的

懶漢式單例類;第二種實現十預先建立例項,即所謂的

餓漢式單例類。第一種實現是用時間換空間,第二種實現是用空間換時間。還有一點需要注意的是,第一種實現不是執行緒安全的,即不支援多執行緒。例如,假如執行緒a和執行緒b都檢測到m_pinstance為null,都去建立例項,則會出現錯誤。如果需要第一種實現支援多執行緒,就需要在判斷m_pinstance是否為空前加鎖,操作完成後解鎖,以此來增加對多執行緒的支援。第二種實現在多執行緒支援方面則不存在這樣的問題。

這兩種實現的乙個缺點是在使用者使用完後需要呼叫destroyinstance函式去釋放生成的例項。

兩種單例模式

一。單例模式 有以下的特點 eg。每台計算機可以有若干通訊埠,系統應當集中管理這些通訊埠,以避免乙個通訊埠同時被兩個請求同時呼叫。為了避免不一致狀態 1 單例類只能有乙個例項。2 單例類必須自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。1 懶漢式單例 singleton通過將構造...

JAVA中的兩種單例模式

乙個類中我們可以通過new 建立很多的物件,但是有的類只允許有乙個物件來進行操作,這就是所謂的單例模式。我們都知道單例模式有兩種,一種是餓漢模式,一種是懶漢模式。顧名思義,懶漢模式就是在需要時候才建立單例物件,而餓漢模式我們可以理解它很餓所以急切提前把單例物件建立好,不管需不需要。關於單例物件,我們...

單例模式(java兩種方式實現)

測試類 public class singletontest1 單例類 class singleton 構造方法私有帶來乙個問題,就是不能產生例項了,所以通過寫乙個方法返回乙個例項 第二步 public static singleton getinstance 必須為static 這樣在main中才...