侯捷單例 和劍指不同

餓漢式
餓漢式的特點是一開始就加載了,如果說懶漢式是“時間換空間”,那么餓漢式就是“空間換時間”,因為一開始就創建了實例,所以每次用到的之后直接返回就好了。餓漢式有兩種常見的寫法,寫法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();
}
單例模式會帶來哪些問題?
單例模式一般沒有接口,擴展困難。如果要擴展,則除了修改原來的代碼,沒有第二種途徑,違背開閉原則。
在并發測試中,單例模式不利于代碼調試。在調試過程中,如果單例中的代碼沒有執行完,也不能模擬生成一個新的對象。
單例模式的功能代碼通常寫在一個類中,如果功能設計不合理,則很容易違背單一職責原則。