面经:单例模式

侯捷单例 和剑指不同

饿汉式
饿汉式的特点是一开始就加载了,如果说懒汉式是“时间换空间”,那么饿汉式就是“空间换时间”,因为一开始就创建了实例,所以每次用到的之后直接返回就好了。饿汉式有两种常见的写法,写法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地址等,因…

基于属性加密的ABE算法的应用场景思考展望

ABE算法先前使用在云计算场景中,和区块链存在交叉应用场景,具体问题体现在 数据的异地存储、云服务器提供商的不可信、管理员能否对自身数据拥有足够的控制能力以及如何保证数据的安全有效共享都是亟需解决的问题。 研究背景: 云计算越来越…

面经:设计模式

什么是接口隔离原则(Interface Segregation Principle) 定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。概括的说就是:建立单一接口,不要建立臃肿庞大的接口。&…

区块链、密码和银行之间的衍生关系

银行场景中密码服务 设置密码 用户在注册的时候,如果使用弱密码,系统会检测出来。我的猜测是将弱密码的hash运算和用户输入的密码hash比对,如果一致,禁止用户注册。 1、不要设置简单密码,您设置的密码必须符合中信银…

AIgorand区块链中VRF随机函数的应用

VRF(Verifiable Random Function) 可验证随机函数可以看作是一个随机预言机,即可以通过任意的一个输入,获得一个随机数输出:输出的结果(Output)是一个随机数,其数值会均匀分布在值域…

C++学习笔记 简单部分

C 数据类型 使用变量来存储各种信息,变量保留的是它所存储的值的内存位置。这意味着,当创建一个变量时,就会在内存中保留一些空间。这段内存空间可以用于存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型…

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初始化字符串 编译不报错

密钥协商(密钥交换)机制的讲解

国标文件涉及密钥协商算法的函数 生成密钥协商参数并输出计算会话密钥产生协商数据并且计算会话密钥 密钥协商(交换)算法及其原理 密钥交换/协商目的 “密钥协商机制”是:(在身份认证的前提下)规避【偷窥】的风险。…

基于ECC算法的秘钥协商

基于ECC算法的衍生算法 ECDH(ECCDH)RSAECDHE(ECCDHE) ECDH密钥协商(ECCDH) 椭圆曲线密码学是属于非对称密码学的,其私钥的计算公式如下: 私钥是一个随机数d,取值范围在1……n-1,其中n是子群的阶公钥是点HdG&#xff…

C++11 多线程相关知识的学习

C多线程类Thread(C11) C11中std命名空间将Boost库中的Thread加入,Boost的多线程从准标准变为标准,这里将其用法整理复习,以demo的形式复习,还是喜欢看我自己写的东西,符合我的个人逻辑头文件为…

C++11 explicit关键字的作用

explicit 在C中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。因为无参构造函数和多参构造函数本身就是显示调用的。再加上explicit关键字也没有什么意义…

C++11学习 virtual(虚函数)的用法

Virtual虚函数 在面向对象的C语言中,虚函数(virtual function)是一个非常重要的概念。因为它充分体现了面向对象思想中的继承和多态性这两大特性,在C语言里应用极广。多态性:其含义就是多种形式;将具有继承…

c++ const

函数名称不单单是函数名 const 补充内容 还有 const 参数类型 函数后头const 只能在成员函数如果const对象 但是我没通过const成员函数 就会报错

手撕源码 alloc

怎么有效的手撕代码呢? gnu gcc 2.9 的 内存池 把代码跑起来把代码一个片段拿出来使用画出代码运行的流程图一行一行的搬运在看源码的情况下写出类似的demo 第三步: 第五步: // 这个头文件包含一个模板类 allocator,用于管理内存的分配、…

针对Algorand所使用的密码相关技术细节进行介绍

关键概念 VRF: 可验证随机函数。简单来说是:vrf,Proof VRF(sk,seed),sk为私钥,seed为随机种子;通过Verify(proof,pk,seed)验证vrf的合法性。cryptographic sorition: 根据用户本轮的VRF值,自身的权重以及公开的区块链…

对于Algorand的介绍

介绍 Algorand具有能耗低、效率高、民主化、分叉概率极低、可拓展性好等优点,旨在解决现有区块链项目存在的“不可能三角”(高度可扩展的、安全的、去中心化)问题。Algorand由MIT教授、图灵奖得主Silvio Micali发起,拥有MIT区块链…

C++学习 高级编程

C 文件和流 到目前为止,目前使用最为广泛的是 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。以下将介绍从文件读取流和向文件写入流。这就需要用到 C 中另一个标准库 fstream,它定义了三个新的数…

内存池中的嵌入式指针

嵌入式指针 可以union改struct 内存分配后 next指针就没用了 直接作为数据空间比较省内存 因为对指针指向的内存存储的时候 编译器是不管你是什么类型的 &#xff0c;这里有道练习题可以对指针的概念稍微理解一下&#xff1a; #include <iostream> using std::cout; us…

内存池的实现4 alloc内存池

alloc 内存池 优点: &#xff1a;本质是定长内存池的改进&#xff0c;分配和释放的效率高。可以解决一定长度内存分配的问题。 缺点 &#xff1a;存在内碎片的问题&#xff0c;且将一块大内存切小以后&#xff0c;申请大内存无法使用&#xff0c;别的FreeList挂了很多空闲的内存…