网站首页 > 技术文章 正文
C++为什么不提倡使用单例模式?
我是不提倡C++当中使用单例模式的,在很早以前写过一个答案提过关于单例的问题。
正好最近有个朋友刚翻译了C++ core guidelines,里面的I.3也提了单例模式的危害,直接用“避免单例”作为标题,今天可以稍微展开聊聊为什么单例在C++中不推荐。最近很多小伙伴找我,说想要一些C++资料,然后我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C++专业入门到高级教程+工具包」,点个关注,全部无偿共享给大家!!!
评论区回复“888”,关注我之后私信回复“666”,即可拿走。
首先,我们得先讨论全局变量的危害。由于全局变量完全破坏了RAII的封装性,像神一样直接干涉万物。在C++ core guidelines里列举了以下四点:
可测试性
你无法孤立地测试你的实体。如果单元不存在,那么单元测试也将不存在。你只能进行系统测试。实体的执行效果要依赖整个系统的状态。
重构
因为你无法孤立地对代码进行推理,重构它会相当有挑战。
优化
你无法轻易地重新安排函数的调用或者在不同的线程上进行函数调用,因为可能有隐藏的依赖。缓存之前的函数调用结果也极为危险。
并发
产生数据竞争的必要条件是有共享而可变的状态,而非const全局变量正是共享而可变的。
拾人牙慧部分结束:
代码要对输入输出负责,当依赖全局的变量来作为输入或者输出的单元的时候,谁也不知道有谁的恶心代码用什么恶心的姿势把全局变量的值在啥时候给tm改了。可测试性无从谈起,可重用性基本为0,模块化、可维护性也几乎为零,可读性荡然无存。
- 上一篇: 单例模式——C++实现自动释放单例类的实例
- 下一篇: C++设计模式——单例模式
猜你喜欢
- 2024-09-24 学习C++之良好的编程习惯与编程要点
- 2024-09-24 大一萌新看过来,“这样”学C++,让你不再迷茫
- 2024-09-24 学习单例模式引发的思考
- 2024-09-24 C++中相互依赖的全局变量初始化策略
- 2024-09-24 零基础学习C++
- 2024-09-24 c++的面试总结
- 2024-09-24 避免踩坑,C++常见面试题的分析与解答
- 2024-09-24 20道必须掌握的C++题,纸上谈兵惯用伎俩
- 2024-09-24 C++11魔法静态变量magic static
- 2024-09-24 C++11 中值得关注的几大变化
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)