c++ - 单例使用 C++

标签 c++ singleton

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

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

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

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

谢谢...

最佳答案

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

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

  • 您禁止与其他类(class)共享该状态。
  • 在简单的实现中,没有什么可以阻止任何人创建您的新类的另一个实例。如果这在语义上是无效的,那么您不应该在代码中允许它,这意味着您无论如何都必须编写所有的单例功能。

当然,仅仅在全局变量之上添加一点 Singleton Magic 并不能解决全局状态的问题,从这个意义上说,单例变量是邪恶的™。但在某些情况下,您的模型需要具有全局状态。在这些情况下,封装是一件好事,因为它允许您控制谁修改什么、何时以及如何修改。例如,您可以使单例工厂方法仅供某些类访问。

关于c++ - 单例使用 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14625395/

相关文章:

VC2010 中的 C++0x 对等构造函数

c++ - 使用 qsort() 进行稳定排序?

c++ - 这个纹理是如何传递给片段着色器的?

ios - 为什么我需要为音频创建一个共享实例?

c# - 多线程 C# 应用程序中的惰性单例

c# - 将用户帐户信息存储在单例对象上

c++ - 有什么好的教程可以帮助我创建用于 C、C++ 中随机化的头文件

sqlite - Flutter Sqflite 多表模型

ios - 我正在用 Swift 编写 iOS 应用程序。我应该使用单例吗?

c++ - 尝试使用 strok 在 C++ 中拆分 char*,程序编译但崩溃