單例模式(Singleton)

2021-09-03 02:03:40 字數 1395 閱讀 8167

#include using namespace std;

class cperson

~cperson()

cperson(const cperson &p) //cperson* pp = new cperson(*ps); 為了防止這種初始化,將拷貝構造設定為私有的

public:

static cperson* getobject()

else

return 0;

} //static void destroyobject(cperson *pp)

//};

bool cperson::bflag = false;

//這種方法在多執行緒模型中,同時訪問的時候就可能同時建立多個例項,而且這多個例項不是同乙個物件

//餓漢式:單例例項在類裝載時就構建,急切初始化。(預先載入法)

優點:    1.執行緒安全 

2.在類載入的同時已經建立好乙個靜態物件,呼叫時反應速度快 

缺點: 資源效率不高,可能getinstance()永遠不會執行到

//餓漢模式

class test

~test()

public:

static test *instance;

public:

static test* getinstance() };

test* test::instance = new test();

靜態資料成員和普通資料成員區別較大,體現在下面幾點:

(1)普通資料成員屬於類的乙個具體的物件,只有物件被建立了,普通資料成員才會被分配記憶體。而靜態資料成員屬於整個類,即使沒有任何物件建立,類的靜態資料成員變數也存在。

(2)因為類的靜態資料成員的存在不依賴與於任何類物件的存在,類的靜態資料成員應該在**中被顯式地初始化,一般要在類外進行,例如上例。在c++11標準中,我們可以為靜態成員提供const整數型別的類內初始值,不過要求靜態成員必須是字面值常量型別的constexpr(源自c++primer中文版270頁)。

(3)外部訪問類的靜態成員能直接通過類名來訪問,例如:test::getcount()。雖然靜態成員不屬於類的某個物件,但是我們仍然可以使用類的物件、引用或指標來訪問靜態成員(源自c++primer中文版269頁),例如:

test ac1,*ac2;

int r;

r=ac1.getcount();// 或者 r=ac2->getcount();

(4)類的靜態成員函式無法直接訪問普通資料成員(可以通過物件名間接的訪問),而類的任何成員函式都可以訪問類的靜態資料成員。

(5)靜態成員和類的普通成員一樣,也具有public、protected、private3種訪問級別,也可以具有返回值、const修飾符等引數。

Singleton 單例 模式

singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...

Singleton 單例 模式

今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...

單例(Singleton)模式

單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...