单例使用情况C++

Singleton usage C++

本文关键字:C++ 情况 用情 单例使      更新时间:2023-10-16

不太确定以前是否问过这个问题。

语言是 c++。我正在编写一个包含许多数据项的类,这些数据项应该具有静态行为,例如 1 KB 的缓冲区,其中包含一些数据并应为所有对象共享。我的老板问我,你为什么不写一个单例类,把所有的数据项都放进去?

我对单身人士有一些痛苦的经历,最近我在谷歌上搜索了"单例是邪恶的"并阅读了几篇文章。在SO中,我也读了同样的内容。所以我在上述情况下使用单例有点犹豫,因为我相信那里并不是真正需要的。所以我问我的老板,为所需的数据项设置静态数据成员,而不是使类成为单一实例,是否可以?但是他没有给我任何明确的答案,并告诉我,设计模式的存在是为了让生活更轻松,那么使用它有什么问题。我不想和他争论。:)

我不是OOP专家。因此,如果有人可以评论谁的观点更有意义(以及:)是否两者都是错误的),那将是有帮助的。

谢谢。。。

单例本质上只不过是围绕全局变量的一些 OO 封装。

如果你将你的状态封装在某个类中,只是把它作为一个静态成员添加到需要信息的类中,那么你与单例并没有太大区别,只是至少有两个缺点:

  • 您排除了与其他类共享该状态的可能性。
  • 在简单的实现中,没有什么可以阻止任何人创建新类的另一个实例。如果这在语义上是无效的,则不应在代码中允许它,这意味着无论如何您都必须编写所有单例功能。
当然,只是在全局之上打一点单例

魔术并不能使全局状态的问题消失,从这个意义上说,单例是邪恶™的。但在某些情况下,您的模型需要具有全局状态。在这些情况下,封装是一件好事,因为它允许您控制谁修改什么、何时以及如何修改。例如,可以使单一实例工厂方法仅对某些类访问。