關於C 單例模式(餓漢式和懶漢式)學習的一些理解

2021-10-03 20:58:14 字數 1781 閱讀 1080

1. 單例模式

從字面意思就可以看出來單例模式是乙個類只能建立乙個例項物件,這種建立物件的方法帶來的好處就是多執行緒開發中,初始化一次套接字,共享同乙個資源,節省建立物件的時間,有些場景模式下,要求乙個類只生成乙個唯一的物件。單例模式又分為餓漢式和懶漢式單例模式。

它的基本實現步驟是

(1)先把建構函式私有化

(2)提供乙個全域性的靜態方法(建立物件用)

(3)在類中定義乙個靜態指標,指向本類的變數的靜態變數指標(訪問靜態方法)

1.2懶漢式單例模式

#include

using

namespace std;

//懶漢式

class

singelton

public

:static singelton *

getinstance()

//第二步:提供乙個全域性的靜態方法

return m_singer;

}static

void

printt()

private

:static singelton *m_singer;

//第三步:在類中定義乙個靜態指標,指向本類的變數的靜態變數指標

static

int m_count;};

singelton *singelton::m_singer =

null

;//懶漢式 並沒有建立單例物件

int singelton::m_count =0;

intmain()

else

p1->

printt()

; p2-

>

printt()

;return0;

}

1.1餓漢式單例模式

#include

using

namespace std;

class

singelton2

public

:static singelton2 *

getinstance()

//第二步:提供全域性的靜態方法

static

void

freeinstance()

}static

void

printt()

private

:static singelton2 *m_singer;

//第三步:定義靜態指標

static

int m_count;};

singelton2 *singelton2::m_singer =

new singelton2;

//不管你建立不建立例項,均把例項new出來

int singelton2::m_count =0;

intmain()

else

p1->

printt()

; p2-

>

printt()

; singelton2::

freeinstance()

; singelton2::

freeinstance()

;return0;

}

2總結

多執行緒中會導致多個例項的產生,從而導致執行**不正確以及記憶體的洩露。每次需要建立臨界區,訪問臨界區需要加鎖和解鎖。

單例模式 懶漢式 和 餓漢式

單例模式三要素 a 私有構造方法 這樣外界就沒辦法建立物件 b 私有靜態引用指向自己例項 c 以自己例項為返回值的公有靜態方法 對外暴露介面獲取例項 在spring中建立的bean例項預設都是單例模式存在的。所謂 懶漢式 與 餓漢式 的區別,是在與建立單例物件的時間不同。懶漢式 是在你真正用到的時候...

單例模式 餓漢式和懶漢式

1.單例模式。singleton無論外界有多少物件都是乙個指向同乙個位址。節約空間。1 構造方法私有化 2 在本類中建立乙個static修飾的物件。3 所有的屬性必須私有化。4 通過乙個方法來把本類中建立的該物件返回。2.餓漢式 指全域性的單例例項在類裝載時構建。class people publi...

單例模式(餓漢式和懶漢式)

單例模式 餓漢式和懶漢式 餓漢式單例模式,static表變數會在裝載時初始化,不會涉及多個執行緒物件訪問該物件的問題,虛擬機器只會保證裝載一次該類,不會發生併發的問題,可以省略synchronized關鍵字 缺點 如果只是載入本類,而不是呼叫getinstance方法,永遠不呼叫,則會造成資源浪費的...