侯捷单例 和剑指不同

饿汉式
饿汉式的特点是一开始就加载了,如果说懒汉式是“时间换空间”,那么饿汉式就是“空间换时间”,因为一开始就创建了实例,所以每次用到的之后直接返回就好了。饿汉式有两种常见的写法,写法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();
}
单例模式会带来哪些问题?
单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来的代码,没有第二种途径,违背开闭原则。
在并发测试中,单例模式不利于代码调试。在调试过程中,如果单例中的代码没有执行完,也不能模拟生成一个新的对象。
单例模式的功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则。