C 與設計模式(4) 單例模式

2021-07-24 04:50:20 字數 1501 閱讀 8293

單例模式是指在乙個專案中用來建立獨一無二的,只能夠有乙個例項的物件。

由於大多數單例物件的存在時間都比main長,所以我們並不需要擔心物件的釋放。

class singleton

private:

static singleton* singleton;

};singleton *singleton::singleton = null;

singleton* singleton::getinstance()

通過乙個讓建構函式私有(或受保護)來拒絕一切直接的構造行為,然後提供乙個藉口用於建立和訪問。

在此基礎上,如果出現這樣的**:

singleton s1(*singleton::getinstance());

singleton s2 = *singleton::getinstance();

就可以通過拷貝建構函式來建立新的物件,所以我們同樣要禁用對應的建構函式

private:

singleton(const singleton&);

singleton& operator =(const singleton&);

class singleton

private:

static singleton* singleton;

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

singleton* singleton::getinstance()

問題是過早建立消耗資源。

簡單的解決方式就是加鎖。

class lock

~lock()

};class singleton

private:

static singleton* singleton;

static mutex m;

};singleton *singleton::singleton = null;

singleton* singleton::getinstance()

但經常訪問會有效率問題。。。

class lock

~lock()

};class singleton

private:

static singleton* singleton;

static mutex m;

};singleton *singleton::singleton = null;

singleton* singleton::getinstance()

return singleton;

}

避免執行緒鎖開啟後有其他的執行緒已完成判斷,所以還要在進行一次判斷。

12/5修改了一些語法錯誤(我不是編譯器裡寫出來的嗎,怎麼回事???)

設計模式4 單例模式

保證乙個類僅有乙個例項,並提供乙個訪問他的全域性訪問點。所有類都有構造方法,假如不對他進行編碼,系統會生成空的public 的構造方法,外部類就能建立這個類的物件。為了不讓其他類能new出這個類的例項,所以需要寫乙個private 的構造方法 其實即使使用private修飾,通過反射機制還是能在外部...

設計模式 4 單例模式

單例模式屬於建立型的設計模式,其特點是在於保證乙個類只會被例項化一次,可以作為全域性唯一資源提供給系統。此處通過判斷兩個例項的位址是否一致來驗證單例模式,中包含了保證多執行緒安全的單例模式實現。由於python下的懶漢單例模式實現本人覺得是不可能的,因此下面使用了double check的方式實現了...

設計模式 4 單例模式

單例模式用來確保乙個類只有乙個例項,並提供乙個全域性訪問點。在所有的設計模式中,單例模式是最簡單也是最常用的一種設計模式,它只為乙個例項提供乙個全域性物件,內次嘗試去獲取乙個類的例項的時候,保證獲取到的都是這乙個物件。下面是關於單例模式中的一些小概念 餓漢式和懶漢式區別 餓漢就是類一旦載入,就把單例...