單例模式 探索之旅

2021-07-03 06:59:38 字數 1428 閱讀 2090

當程式中需要在多處用到乙個類的同乙個例項時,我們通常得給此類宣告乙個全域性變數,不然只有通過函式鏈傳遞此類例項的引用,然而這兩種方式都存在一定問題,特別是要考慮執行緒安全時。我們需要一種更方便安全的方式來應對多處用到乙個類的同乙個例項問題。

程式生命週期中,保證類只有乙個例項,且提供乙個訪問它的全域性訪問點(此訪問點為singleton類的成員變數,在整個程式中只能有乙個例項,而singleton類可以有多個)。

1.      當類需在多處使用,而其狀態需要被下一次呼叫繼承時;

1.      讓類的例項使用時變得非常方便,無須在目的類中引用上一次儲存被用類的類的資訊;

2.      避免了類的例項狀態經過函式鏈傳遞;

3.      避免了使用全域性變數來操作類例項;

class singleton

return _instance;

}private:

static singleton* _instance;

};singleton* singleton::_instance =nullptr;

#pragma once

#include #include templateclass singleton

static std::shared_ptrinstance()

return _instance;

} static void release(void)

}protected:

singleton(){}

static std::shared_ptr_instance;

}; templatestd::shared_ptrsingleton::_instance(nullptr);

//測試**

class testclassa

private:

int i = 0;};

class testclassb:public singleton

private:

int i = 0;};

class testclassc

private:

int i = 0;};

typedef singletontestclasscsingleton;

void singletontesta()

void singletontestb()

void singletontestc()

結果:

Second Life 軟體探索之旅

主題 日期 second life 客戶機,第 2 部分 深入研究文件 second life 客戶機的開發者文件採用了 wiki。在 second life 軟體探索之旅的第 2 階段,我們將檢視該文件,並使用它對客戶機進行一些修改。2007年5月31日 second life 客戶機,第 3 部...

Identity Core探索之旅 五

authorization,意為授權,當使用者登入後,使用者已經有了自己的身份資訊 我是誰 但是使用者也分層級,有普通使用者,vip使用者甚至管理員,我們現在要求只能管理員可以登入,怎麼做呢?很簡單,先了解下怎麼配置authorization。先在service中配置authorization se...

我的GIT探索之旅

公司用的版本控制工具是vss和tfs,貌似微軟比較推薦的是tfs,其功能確實比較強大,但 也是比較客觀的。公司在這方面管理也比較嚴格,所以在vss上申請了賬號,準備把做好的自動化測試指令碼提交上去,可杯具的事情發生了,乙個星期賬號還沒有搞定,得知db無故down掉了,沒辦法,我們可經不起折騰了。go...