實現singleton模式(要求熟練掌握)
單例模式的要求:類在記憶體中只能有乙個例項
1.該物件不能是全域性物件或者棧物件
2.該物件是乙個堆物件
靜態成員函式與普通成員函式的區別:
單例模式的實現步驟:
1.將建構函式私有化
2.在類中定義乙個靜態的指標物件,並在類外初始化為空
3.定義乙個返回值為類指標的靜態成員函式,如果2中的指標物件為空,則初始化物件,以後再有物件呼叫該靜態成員函式的時候,不在初始化物件,而是直接返回物件,保證類在記憶體中只有乙個例項
單例物件的自動釋放:
法一:巢狀類+靜態物件
基類先建立,派生類後建立
巢狀類先建立,本類後建立
法二:atexit+destroy()
法三:pthread_once + atexit
pthread_once方法的作用:在多執行緒環境之下,其註冊的函式只會被執行一次
生成物件的要求:
1.只能生成棧物件的方法:不能生成堆物件,不能通過new表示式在類之外生成物件
<1>將建構函式放入private區域
<2>operator new函式放入到private區域(採用)
但是要建立物件要求建構函式必須在public區域,故不能把建構函式放入private區域
所以只可以把operator new/delete函式private化
2.只能生成堆物件的方法:不能生成棧物件,不能在類之外呼叫建構函式或者析構函式
<1>將建構函式放到private區域(無法生成堆物件)
<2>將析構函式放到private區域
a)對於堆物件而言,執行delete表示式無法通過編譯
b)在public區域定義乙個destroy()(採用)
單例模式的**:在虛擬機器的c++_2019的目錄下自己進行檢視。
單例模式具有以下幾個優點:
面試題2 實現Singleton模式
題目 設計乙個類,我們只能生成該類的乙個例項。只能生成乙個例項的類是實現singleton 單例 模式的型別。由於設計模式在物件導向程式設計中起著舉足輕重的作用,面試中經常會出現這樣的面試題。不好得解決方法一 只適用於單執行緒環境 public sealed class singleton priv...
面試題2 實現Singleton模式
題目 設計乙個類,我們只能生成該類的乙個例項 考察點 單例模式 知識點 主要介紹兩種 懶漢式 餓漢式單例。單例模式有以下特點 1.單例類只能有乙個例項。2.單例類必須自己建立自己的唯一例項。3.單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例...
面試題2 實現Singleton模式
題目描述 設計乙個類,我們只能生成該類的乙個例項。解決方案 1.只適用於單執行緒環境 單執行緒環境下可以正常工作。但是在多執行緒環境下,如果兩個執行緒同時判斷到instance為null,那麼這兩個執行緒都會建立乙個例項,此時的singleton就不滿足單例模式的要求了。1 public seale...