C 實現單例模式

2021-08-21 07:25:24 字數 1873 閱讀 4002

單例模式的概念:只允許產生乙個物件的類

詳細解釋:

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項。即乙個類只有乙個物件例項

單例模式實現方法:

單例類保證全域性只有唯一乙個自行建立的例項物件

單例類提供獲取這個唯一例項的介面

單例模式的優缺點:

優點:阻止其他物件例項化自己的副本,保證所有訪問唯一性。

可以靈活的更改例項化的過程。

缺點: 每次都要檢查物件是不是已經生成,造成多餘開銷。

單例大約有兩種實現方法:

懶漢:故名思義,不到萬不得已就不會去例項化類,也就是說在第一次用到類例項的時候才會去例項化,所以上邊的經典方法被歸為懶漢實現;

餓漢:餓了肯定要飢不擇食。所以在單例類定義的時候就進行例項化

特點與選擇:

1,由於要進行執行緒同步,所以在訪問量比較大,或者可能訪問的執行緒比較多時,

採用餓漢實現,可以實現更好的效能。這是以空間換時間。

2,在訪問量較小時,採用懶漢實現。這是以時間換空間。

//最簡單的單例模式

class

singleton

private

:

static

singleton* p;

public

:

static

singleton* instance();

};singleton* singleton::p = null;

singleton* singleton::instance()

//

加鎖的經典懶漢實現:

class

singleton

private

:

static singleton* p;

public

:

static

pthread_mutex_t mutex;

static singleton* initance();

};

pthread_mutex_t singleton::mutex;

singleton* singleton::p = null;

singleton* singleton::initance()

return

p;

}

//內部靜態變數的懶漢實現

class

singleton

public

:

static

pthread_mutex_t mutex;

static

singleton*

initance();

inta;

};

pthread_mutex_t singleton::mutex;

singleton

*singleton::initance()

//餓漢模式

class

singleton

private

:

static

singleton* p;

public

:

static

singleton* initance();

};

singleton* singleton::p =

newsingleton;

singleton* singleton::initance()

C 實現單例模式

給所需要進行單例的類ctest的建構函式宣告為private或者protected 防止在類外隨意生成ctest的物件 然後宣告乙個靜態成員變數 instance 乙個靜態成員函式getinsance staticctest getinstance staticctest instance 靜態成員...

C 實現單例模式

ifndef singleton h define singleton h include include using namespace std class locker inline locker inline void lock inline void unlock private pthre...

C 實現單例模式

class singleton 私有建構函式 singleton const singleton 拷貝建構函式,只宣告不定義,這要當使用者或友元想要拷貝構造該類的已存在例項時會出錯。singleton operator const singleton 賦值運算子,只宣告不定義,作用同上 public...