单例用法C ++

时间:2013-01-31 12:05:42

标签: c++ singleton

不确定之前是否曾经问过这个问题。

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

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

我不是OOP专家。因此,如果有人可以评论哪一点更有意义[也两者都是错误的话]将会有所帮助。)。

...谢谢

1 个答案:

答案 0 :(得分:2)

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

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

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

当然,只要在全局状态上打一点Singleton Magic就不会让全局状态的问题消失,从这个意义上说,单身人士是邪恶的。但是在某些情况下,您的模型需要具有全局状态。在这些情况下,封装是一件好事,因为它允许您控制谁修改了什么,何时以及如何修改。例如,您可以使单例工厂方法仅对某些类可访问。