面試題2 實現Singleton模式

2021-09-22 21:12:44 字數 946 閱讀 5710

實現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...