Chapter21 單例模式

2022-08-13 04:39:19 字數 970 閱讀 9997

單例模式(singleton),保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

通常我們可以讓乙個全域性變數使的乙個物件被訪問,但它不能防止你例項化多個物件。乙個最好的方法就是,讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項可以被建立,並且它可以提供乙份訪問該例項的方法。

單例模式因為singleton類封裝它的唯一例項,這樣它可以嚴格地控制客戶怎樣訪問它以及何時訪問它。簡單的說就是對唯一例項的受控訪問。

多執行緒的單例,需要用lock確保當乙個執行緒位於**的臨界區時,另乙個執行緒不能進入臨界區。如果其他執行緒進入鎖定的臨界區,則它將一直等待,直到該鎖被釋放。

singleton類

#ifndef _singleton_hpp

#define _singleton_hpp

class

singleton

return

pinstance;

}private

: singleton(){};

static singleton*pinstance;

};singleton* singleton::pinstance = nullptr; //

cpp 靜態變數不允許類內初始化,必須類外。

#endif

//

客戶端程式

#include#include

"singleton.hpp

"using

namespace

std;

intmain()

getchar();

return0;

}

2 1 單例模式

皇帝與臣子 乙個類只能生成乙個物件 皇帝 其他所有類對這個物件的依賴都是同乙個,體現到 上如下 author zephyr description 定義乙個私有的構造器,emperor自己可以new乙個物件,但其他類不能new當前物件,其他類只能通過靜態的getinstance方法獲取emperor...

2 1單例模式

物件資料型別的作用 把描述同乙個事物 同乙個物件 的屬性和方法放在乙個記憶體空間下,起到了分組的作用,這樣不同事物之間的屬性即使屬性名相同,相互也不會發生衝突 我們把這種分組編寫 的模式叫做 單例模式 在單例模式中我們把person1和person2也叫做 命名空間 var person1 var ...

設計模式 21 單例模式

宣告 vs2012中已經支援c 11了,因此下面的程式在vs2012中可以執行。如果版本比2012低,可能因為不支援 std mutex,std shared ptr而失敗。ifndef singleton h define singleton h include include using nam...