面經:單例模式

侯捷單例 和劍指不同

餓漢式
餓漢式的特點是一開始就加載了,如果說懶漢式是“時間換空間”,那么餓漢式就是“空間換時間”,因為一開始就創建了實例,所以每次用到的之后直接返回就好了。餓漢式有兩種常見的寫法,寫法1和寫法2
書中第一個方法是懶函數、這種寫法不是線程安全的,因為靜態的局部變量是在調用的時候分配到靜態存儲區,所以在編譯的時候沒有分配,

靜態局部對象:
在程序執行到該對象的定義處時,創建對象并調用相應的構造函數!
如果在定義對象時沒有提供初始指,則會暗中調用默認構造函數,如果沒有默認構造函數,則自動初始化為0。
如果在定義對象時提供了初始值,則會暗中調用類型匹配的帶參的構造函數(包括拷貝構造函數),如果沒有定義這樣的構造函數,編譯器可能報錯!
直到main()結束后才會調用析構函數!
C++的三種單例模式-----深度解析_zhc的博客-CSDN博客_c++單例模式
可是博客沒有提及懶漢式是不是單例
懶漢式和餓漢式的區別不是返回對象類型還是對象指針。事實上單例模式都應該返回對象指針,因為你的構造函數是私有的,不可能在靜態函數外初始化實例。??? 創建時間不同 確實都應該返回指針

(47條消息) c++ 餓漢式和懶漢式 - CSDN
靜態變量是在編譯時就初始化的,理論上你檢測不到的……
對象的初始化和你在類中的的定義有關,如果類中沒有定義,則會進行一個默認的初始化,將所有值初始化為0
那兩個都是指針的話 餓漢不就變成懶漢了嗎 因為這個初始化考的不是靜態變量是在編譯時就初始化 一個是null 一個是創建對象,創建對象也可以返回指針呀&取地址

#include
#include
using namespace std;
class Single{
public:
static Single* Getsingle(){
return &__single;
}
Single(const Single& )=delete;
Single& operator=(const Single&)=delete;
private:
Single(){};
static Single __single;
};
Single::__single;
int main(){
auto s1 = Single::Getsingle();
auto s2 = Single::Getsingle();
}
在這里插入圖片描述

單例模式會帶來哪些問題?

單例模式一般沒有接口,擴展困難。如果要擴展,則除了修改原來的代碼,沒有第二種途徑,違背開閉原則。

在并發測試中,單例模式不利于代碼調試。在調試過程中,如果單例中的代碼沒有執行完,也不能模擬生成一個新的對象。

單例模式的功能代碼通常寫在一個類中,如果功能設計不合理,則很容易違背單一職責原則。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447122.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447122.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

屬性加密技術及基于屬性的ABE算法的訪問控制技術介紹

屬性加密技術 基于身份的加密體制簡介 基于身份的加密體制可以看作一種特殊的公鑰加密,它有如下特點:系統中用戶的公鑰可以由任意的字符串組成。這些字符串可以是用戶在現實中的身份信息,如:身份證號碼、用戶姓名、電話號碼、Email地址等,因…

面經:http協議

總結HTTPS傳輸過程 客戶端先從服務器獲取到證書,證書中包含公鑰 客戶端將證書進行校驗 客戶端生成一個對稱密鑰,用證書中的公鑰進行加密,發送給服務器 服務器得到這個請求后用私鑰進行解密,得到該密鑰 客戶端以后發出后續的請求&…

基于屬性加密的ABE算法的應用場景思考展望

ABE算法先前使用在云計算場景中,和區塊鏈存在交叉應用場景,具體問題體現在 數據的異地存儲、云服務器提供商的不可信、管理員能否對自身數據擁有足夠的控制能力以及如何保證數據的安全有效共享都是亟需解決的問題。 研究背景: 云計算越來越…

面經:設計模式

什么是接口隔離原則(Interface Segregation Principle) 定義:客戶端不應該依賴它不需要的接口;一個類對另一個類的依賴應該建立在最小的接口上。概括的說就是:建立單一接口,不要建立臃腫龐大的接口。&…

區塊鏈、密碼和銀行之間的衍生關系

銀行場景中密碼服務 設置密碼 用戶在注冊的時候,如果使用弱密碼,系統會檢測出來。我的猜測是將弱密碼的hash運算和用戶輸入的密碼hash比對,如果一致,禁止用戶注冊。 1、不要設置簡單密碼,您設置的密碼必須符合中信銀…

面經:多線程 線程池

使用線程池 當進程被初始化后,主線程就被創建了。對于絕大多數的應用程序來說,通常僅要求有一個主線程,但也可以在進程內創建多個順序執行流,這些順序執行流就是線程,每一個線程都是獨立的。 線程是進程的組成部分&am…

AIgorand區塊鏈中VRF隨機函數的應用

VRF(Verifiable Random Function) 可驗證隨機函數可以看作是一個隨機預言機,即可以通過任意的一個輸入,獲得一個隨機數輸出:輸出的結果(Output)是一個隨機數,其數值會均勻分布在值域…

AIgorand的相關學習參考鏈接

相關具體的開發者與SDK鏈接如下: GoSDKJavaScript SDK 網頁鏈接 測試網申請鏈接Github存儲庫鏈接開發者網址AIgorand官網Telegram電報群綜合白皮書MediumNaver Blog領英Linkedin區塊鏈瀏覽器INC公示錢包地址基金會公示錢包地址Telegram電報群官方 Github地址 相關…

操作系統 內核棧

視頻哈工大李治軍老師:https://www.bilibili.com/video/BV1d4411v7u7?p12 參考文檔:https://blog.csdn.net/SakuraA6/article/details/108810916 學長在我大一推薦我看,p12和p13的內容真的有那么難嗎,現在已經是我看的第三遍了還…

區塊鏈技術指南 序章理解感悟

序二 誤區一: 區塊鏈是一種顛覆性的新技術。區塊鏈不是一個新的技術,而是一個新的技術的組合。其關鍵的技術,包括P2P動態組網、基于密碼學的共享賬本、共識機制(拜占庭將軍問題,分布式場景下的一致性問題&#xff09…

面經:紅黑樹 B樹 B+樹 哈希表

1.對于插入,刪除,查找 以及 輸出有序序列 這幾個操作,紅黑樹也可以完成,時間復雜度 與 用跳表實現是相同的。 但是,對于按照區間查找數據這個操作(比如 [20,300]),紅黑樹的效率沒有跳表高&#…

回溯法和dfs的區別

值得注意,回溯法以深度優先搜索的方式搜索解空間,并且在搜索過程中用剪枝函數避免無效搜索。那為何 回溯算法 深度優先搜索 剪枝函數這一說法沒有錯? 因為樹是特殊的圖。簡單來說,樹是廣義的圖。再簡單來說,樹是圖。…

C++學習筆記 簡單部分

C 數據類型 使用變量來存儲各種信息,變量保留的是它所存儲的值的內存位置。這意味著,當創建一個變量時,就會在內存中保留一些空間。這段內存空間可以用于存儲各種數據類型(比如字符型、寬字符型、整型、浮點型、雙浮點型、布爾型…

Redis kqeue相關源碼

mask 或delmask :添加或者刪除的事件類型,AE_NONE表示沒有任何事件;AE_READABLE表示可讀事件;AE_WRITABLE表示可寫事件; 如aeCreateFileEvent(loop,e->fd,AE_READABLE,redisAeReadEvent,e); static int aeApiAddEv…

C++學習筆記章節中 面向對象詳解

C 類&對象 C類定義 本質上是一個數據類型的藍圖,定義了類的對象包含的信息,以及可以在這個類對象上執行哪些操作。類的定義是以class開頭,后面接類的名稱。類的主體是包含在一個花括號中,類的定義之后,必須跟著一…

Mac 破解軟件打不開沒有權限

Mac 破解軟件打不開沒有權限 sudo codesign -fs - /Applications/CleanMyMac\ X.app文件損壞 xxx sudo xattr -r -d /Applications/MarginNote\ 3.app sudo xattr -r -d com.apple.quarantine xxxx sudo codesign --force --deep --sign - /Applications/MarginNote\ 3\…

條件變量之虛假喚醒

當線程從等待已發出信號的條件變量中醒來,卻發現它等待的條件不滿足時,就會發生虛假喚醒。之所以稱為虛假,是因為該線程似乎無緣無故地被喚醒了。但是虛假喚醒不會無緣無故發生:它們通常是因為在發出條件變量信號和等待線程最終運…

拷貝構造函數和拷貝賦節省代碼最好用一個私有的函數

令 copy assignment操作符調用copy構造函數是不合理的,因為這就像試圖構造一個已經存在的對象。這件事如此荒涔,乃至于根本沒有相關語法。是有一些看似如你所愿的語法,但其實不是;也的確有些語法背后真正做了它,但它們…

解決Dr.com上不了網的問題

如果軟件安裝之后上不了網,會顯示出錯的信息,可以針對所顯示的問題,去定向搜索。 如果是軟件自身的問題,進入終端頁面,可以使用一下這條命令 netsh winsock reset 然后需要重啟電腦

terminate called after throwing an instance of ‘std::logic_error‘ what(): basic_string::_M_constr

terminate called after throwing an instance of ‘std::logic_error’ what(): basic_string::_M_construct null not valid 用0初始化字符串 編譯不報錯