C 單例模式之C 實現

2022-09-23 19:03:09 字數 2237 閱讀 3724

只允許乙個產生乙個物件的類

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

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

(1)阻止其他度物件例項化自己的副本,保證所有訪問唯一性

(2)類控制了例項化的過程,所以可以靈活的更改例項化的過程

(1)每次都需要檢查是否物件已經生成,造成些微的開銷

(2)使用單例物件時,開發人員可能會意外發現自己無法例項化該類

在需要的時候建立物件

懶漢模式需要加入synchronized才可以保證執行緒安全

在main函式開始的時候即建立物件

餓漢模式是執行緒安全的

class singleton

return _inst;

} void print()

private:

singleton()//防止建構函式建立物件

:_a(0)

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

singleton(const singleton&) = delete;

int _a;

static singleton* _inst;//指向例項化的指標定義成靜態成員

};singleton* singleton::_inst = null;加入raii機制,避免死鎖的出現

class singleton

} return _inst;

} void print()

private:

singleton()//防止建構函式建立物件

:_a(0)

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

singleton(const singleton&) = delete;

int _a;

static singleton* _inst;//指向例項化的指標定義成靜態成員

static mutex _mtx;//保證安全的互斥鎖

};singleton* singleton::_inst = null;

mutex singleton::_mtx;新增雙檢查機制來提高效率

新增記憶體柵欄技術來防止由於提公升效率而打亂執行的順序

對單例模式的釋放,下面這種方法是有問題的

最好是呼叫atexit**機制,在main函式結束完畢後再進行釋放

class singleton

} return _inst;

} void print()

static void dellinstance() }

private:

singleton()//防止建構函式建立物件

:_a(0)

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

singleton(const singleton&) = delete;

int _a;

static singleton* _inst;//指向例項化的指標定義成靜態成員

static mutex _mtx;//保證安全的互斥鎖

};singleton* singleton::_inst = null;

mutex singleton::_mtx;但是在特定情況下會出現問題

class singleton

void print()

private:

singleton()

:_a(0)

{} int _a;

singleton& operator=(const singleton&) = delete;

singleton(const singleton&) = delete;

static singleton* _inst;

};singleton* singleton::_inst = new singleton;class singleton

void print()

private:

singleton()

:_a(0)

{} int _a;

singleton& operator=(const singleton&) = delete;

singleton(const singleton&) = delete;

static singleton* _inst;

};singleton* singleton::_inst = null;

設計模式之單例模式 C 實現

單例模式是應用很廣泛的一種設計模式,當需要某個類在整個工程中只有乙個例項的時候,就需要用到單例模式了。實現思路也不難。首先,將建構函式設定為私有 private 許可權,這樣就不允許外部建立例項了。然後,內部建立乙個例項,再通過乙個介面的getinstance 將其設定為公開 public 許可權的...

c 多執行緒單例模式 C 單例模式實現

單例模式,可以說設計模式中最常應用的一種模式了。但是如果沒有學過設計模式的人,可能不會想到要去應用單例模式,面對單例模式適用的情況,可能會優先考慮使用全域性或者靜態變數的方式,這樣比較簡單,也是沒學過設計模式的人所能想到的最簡單的方式了。一般情況下,我們建立的一些類是屬於工具性質的,基本不用儲存太多...

C 實現單例模式

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