单例使用情况C++
Singleton usage C++
不太确定以前是否问过这个问题。
语言是 c++。我正在编写一个包含许多数据项的类,这些数据项应该具有静态行为,例如 1 KB 的缓冲区,其中包含一些数据并应为所有对象共享。我的老板问我,你为什么不写一个单例类,把所有的数据项都放进去?
我对单身人士有一些痛苦的经历,最近我在谷歌上搜索了"单例是邪恶的"并阅读了几篇文章。在SO中,我也读了同样的内容。所以我在上述情况下使用单例有点犹豫,因为我相信那里并不是真正需要的。所以我问我的老板,为所需的数据项设置静态数据成员,而不是使类成为单一实例,是否可以?但是他没有给我任何明确的答案,并告诉我,设计模式的存在是为了让生活更轻松,那么使用它有什么问题。我不想和他争论。:)
我不是OOP专家。因此,如果有人可以评论谁的观点更有意义(以及:)是否两者都是错误的),那将是有帮助的。
谢谢。。。
单例本质上只不过是围绕全局变量的一些 OO 封装。
如果你将你的状态封装在某个类中,只是把它作为一个静态成员添加到需要信息的类中,那么你与单例并没有太大区别,只是至少有两个缺点:
- 您排除了与其他类共享该状态的可能性。
- 在简单的实现中,没有什么可以阻止任何人创建新类的另一个实例。如果这在语义上是无效的,则不应在代码中允许它,这意味着无论如何您都必须编写所有单例功能。
魔术并不能使全局状态的问题消失,从这个意义上说,单例是邪恶™的。但在某些情况下,您的模型需要具有全局状态。在这些情况下,封装是一件好事,因为它允许您控制谁修改什么、何时以及如何修改。例如,可以使单一实例工厂方法仅对某些类访问。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 函数中堆分配的效果与缺少堆分配的情况
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 为什么这个音频包络不能通过开关的情况?
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 在C++中如何在没有pow的情况下进行基础计算