面经:单例模式

侯捷单例 和剑指不同

饿汉式
饿汉式的特点是一开始就加载了,如果说懒汉式是“时间换空间”,那么饿汉式就是“空间换时间”,因为一开始就创建了实例,所以每次用到的之后直接返回就好了。饿汉式有两种常见的写法,写法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.mzph.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初始化字符串 编译不报错