C++为什么不提倡使用单例模式?

news2024/10/6 10:33:12

C++为什么不提倡使用单例模式?


我是不提倡C++当中使用单例模式的,在很早以前写过一个答案提过关于单例的问题。

正好最近有个朋友刚翻译了C++ core guidelines,里面的I.3也提了单例模式的危害,直接用“避免单例”作为标题,今天可以稍微展开聊聊为什么单例在C++中不推荐。最近很多小伙伴找我,说想要一些C++资料,然后我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C++专业入门到高级教程+工具包」,点个关注,全部无偿共享给大家!!!

评论区回复“888”,关注我之后私信回复“666”,即可拿走。

首先,我们得先讨论全局变量的危害。由于全局变量完全破坏了RAII的封装性,像神一样直接干涉万物。在C++ core guidelines里列举了以下四点:

测试性

你无法孤立地测试你的实体。如果单元不存在,那么单元测试也将不存在。你只能进行系统测试。实体的执行效果要依赖整个系统的状态。

重构

因为你无法孤立地对代码进行推理,重构它会相当有挑战。

优化

你无法轻易地重新安排函数的调用或者在不同的线程上进行函数调用,因为可能有隐藏的依赖。缓存之前的函数调用结果也极为危险。

并发

产生数据竞争的必要条件是有共享而可变的状态,而非const全局变量正是共享而可变的。

拾人牙慧部分结束:

代码要对输入输出负责,当依赖全局的变量来作为输入或者输出的单元的时候,谁也不知道有谁的恶心代码用什么恶心的姿势把全局变量的值在啥时候给tm改了。可测试性无从谈起,可重用性基本为0,模块化可维护性也几乎为零,可读性荡然无存。ede500d64321cc4e83801fba578961ee.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1124295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测吧(北京)科技有限公司项目总监王雪冬一行访问计算机学院探讨合作

3月15日,测吧(北京)科技有限公司(以下简称测吧)项目总监王雪冬来到计算机学院对校企合作、学生就业、学生竞赛等一系列工作进行了深入研讨,并向计算机学院颁发了优秀组织单位和优秀指导老师奖。会议由黄曼绮…

JCJC-基于剪贴板的碎片信息收集工具

给大家介绍一款基于剪贴板的碎片信息收集工具-JCJC。 JCJC 的主要功能是跟踪剪贴板内容的变动,自动把剪贴板的内存保存为 MarkDown 格式文件。 MarkDown 文件说明: MarkDown 文件存储在 JCJC 安装目录中的 jcjc\notes 目录下 ,文件名称格式…

Elasticsearch的增删查改详细操作

目录标题 一、创建索引二、查看索引三、修改索引四、删除索引五、向索引增加数据 一、创建索引 单独创建索引 PUT /test1 # test1 为索引名称自定义{"settings":{ # 创建index 需要有效的xcontent字节及Json格式 否则创建不成功 "index":{"number_…

目标跟踪ZoomTrack: Target-aware Non-uniform Resizing for Efficient Visual Tracking

论文作者:Yutong Kou,Jin Gao,Bing Li,Gang Wang,Weiming Hu,Yizheng Wang,Liang Li 作者单位:CASIA; University of Chinese Academy of Sciences; ShanghaiTech University; Beijing Institute of Basic Medical Sciences; People AI, Inc 论文链接&…

解决Nginx代理MinIO出现Access Denied

通过nginx代理访问minio文件地址时出现了Access Denied的错误 我的访问地址: http://ab.ac.ad.cn:10001/group2/2023/10/23/3_20231023101203A001.jpg/ 访问错误情况如下: 解决如下,实测有用 我这里一开始nginx配置如下: server {listen 10001;server_name ab.…

麒麟信安受邀协办2023广电五舟行业交流大会,共建信创产业新生态

10月20日,广州广电五舟科技股份有限公司(简称“广电五舟”)主办的行业交流大会召开,大会围绕智能算力新趋势、共建新生态价值体系、算力发展与生态建设的关系、元宇宙应用展望与生态融合等话题展开深入探讨。麒麟信安作为沈阳站和…

类似东郊到家预约家政保洁小程序搭建

随着生活水平的提高,人们对健康养生的需求越来越重视,按摩作为一种传统的养生方式,备受关注。为了方便用户快速、方便地预约按摩服务,本文将介绍一款按摩预约小程序的开发。 首先,我们通过市场调研和分析发现&#xf…

Linux 爱好者线下沙龙:LLUG 2023·相聚成都 | 第四站

导读:10 月 29 日,Linux 爱好者沙龙将会在四川成都市高新区菁蓉汇,与中国开源年会(COSCON)同场举办!以下为详细介绍。 社群里呼声很高的天府之国,它来了! 经历过 6 月北京场、7 月…

【JS的设计模式一】

本文参考书籍 《JavaScript设计模式与开发实践》 在 JavaScript 编程中,this 关键字总是让人感到迷惑,Function.prototype.call 和 Function.prototype.apply 这两个方法也有着广泛的运用。我们有必要在学习设计模式之前先理解 这几个概念。 this Java…

OPT101光照传感器 光强度传感器模块 单片光电二极管

可以用于水质浊度检测 OPT101是具有片上跨阻抗放大器的单片光电二极管。单个芯片上的光电二极管和跨阻放大器的组合消除了离散设计中常遇到的问题,例如漏电流误差,噪声拾取和增益峰化 杂散电容的结果。输出电压随光强度线性增加。 该放大器设计用于单电源…

AIGCA综述: Survey on Video Diffusion Models

论文作者:Zhen Xing,Qijun Feng,Haoran Chen,Qi Dai,Han Hu,Hang Xu,Zuxuan Wu,Yu-Gang Jiang 作者单位:Fudan University;Microsoft Research Asia;Huawei Noahs Ark Lab 论文链接:http://arxiv.org/abs/2310.10647v1 项目链接&#xff1…

树莓派官方系统自带的gpiozero库教程

网址为:gpiozero — GPIO Zero 1.6.2 Documentation 今年真的走大运,全都是些英文的教材

微信扫一扫抽奖活动怎么做

在当今数字化时代,微信作为中国最大的社交媒体平台之一,拥有着庞大的用户群体和广泛的影响力。微信扫一扫抽奖活动作为一种创新的营销方式,可以利用微信的用户基础和社交属性,吸引更多的目标用户参与,提高品牌知名度和…

【金TECH频道】从第一性原理出发,数字原生银行原来可以这样做

“第一性原理”,是最近商界特别流行的一个词。 这个来自于古希腊先贤的古老词汇,本意在于更多聚焦于事物本质,即是用物理学的角度来看待世界,一层层拨开事物表象,看到里面的本质,再从本质一层层往上推演……

05、Python 简单计算器和进制转换

目录 简单计算器进制转换两种转换方式: 简单计算器 进制转换 简单计算器 使用input()获取用户输入 将用户输入转换为浮点数 执行计算,输出结果 进制转换 两种转换方式: 方式一:使用转换函数:hex()、oct()和bin() …

云计算要学习哪些技术?

学习云计算需要涉及多个技术领域和相关的工具、平台和框架。以下是一个详细的介绍,帮助您了解学习云计算所需的技术。 1. 虚拟化技术 虚拟化是云计算的基础,因此了解虚拟化技术至关重要。学习虚拟化技术时,需要掌握以下知识点: …

系统性认知网络安全

前言:本文旨在介绍网络安全相关基础知识体系和框架 目录 一.信息安全概述 信息安全研究内容及关系 信息安全的基本要求 保密性Confidentiality: 完整性Integrity: 可用性Availability: 二.信息安全的发展 20世纪60年代&…

java--逻辑运算符

1.逻辑运算符 把多个条件放在一起运算,最终返回布尔类型的值:true、false。 &:全true才true,否则为false |:全false才false,否则为true !:结果相反 ^:结果相同则…

TRICONEX 3000520-390C1R 9662-610 FC-TSAI-1620M

TRICONEX 3000520-390C1R 9662-610 FC-TSAI-1620M ADLINK Technology与英特尔合作推出了Vizi-AI,为工业机器视觉人工智能(AI)提供开发入门套件(devkit)。 Vizi-AI starter devkit包括一个基于英特尔凌动处理器的SMARC计算机模块,其中包含英特尔分发的…

PowerCLI 实现企业微信机器人推送消息

前言企业微信机器人 在ARMS告警管理中创建企业微信机器人后,您可以在通知策略中指定对应的企业微信群用于接收告警。当通知策略的匹配规则被触发时,系统会自动向您指定的企业微信群发送告警通知。企业微信群收到通知后,您可以在企业微信群中对告警进行管理。 通过接口实现…