【发布时间】:2011-07-10 02:35:15
【问题描述】:
从 C++ 初学者的角度来看,我认为单例类有用的唯一原因与我想使用静态变量时类似。你们知道什么时候最适合使用单例类吗?
【问题讨论】:
从 C++ 初学者的角度来看,我认为单例类有用的唯一原因与我想使用静态变量时类似。你们知道什么时候最适合使用单例类吗?
【问题讨论】:
您应该使用单例的唯一情况是在极少数情况下,只有这些对象中的一个是至关重要的。这根本不像您想象的那样经常出现。
通常只创建一个相关类的实例就足够了,但没有放入强制对象唯一性所需的所有机制。
每次我使用单例(或在我使用的代码库中找到一个)时,我最终都会删除它,因为我需要更改行为,而单例机制妨碍了我。我还没有在我们的代码(支付处理)中看到一个单例实际上有意义的案例。我有很多案例,我只有一个特定类的一个实例,但没有一个通过单例模式强制执行是必要的或有帮助的。
【讨论】:
当你真正需要它时,你会知道的。
这可能永远不会发生。
当你认为你想要它时,你可能错了。
【讨论】:
我想不出任何适合使用单例类的实例。
在 Java 中,它们主要用于组织。但是,在 C++ 中,您应该使用命名空间。
【讨论】:
我曾经使用 global 静态访问器创建单例:UserRegistry::getInstance()。现在,在Dependency Injection 时代,我只使用registry。也有助于进行单元测试。
【讨论】:
单例类是美化的全局变量。仅在绝对必要时使用,即当一个对象在整个实现范围内只有一个实例时。
【讨论】:
昨天在 Hacker News 上有一个帖子讨论何时使用单例不是一个好主意。关于何时使用单例(全局配置数据,网络服务器应用程序中的会话管理)是一个好主意,那里有几个想法,但是对于单例的每一个理由,也有很好的论据来说明为什么这不是一个好主意。 http://news.ycombinator.com/item?id=2743894
【讨论】:
在游戏开发领域,我认为绝对需要将类实现为单例的几个原因:
物理引擎、Sprite 处理程序、重力处理程序(如果与物理引擎分开)、输入解析器等。
【讨论】:
没有单例一切都可以解决。但我发现自己使用它来更好地控制图形上下文等对象的初始化和破坏。或者在使用状态机更好地控制状态转换时。此外,在(极少数)系统资源限制为 1 个单元(例如控制台)的情况下,以及在多线程处理以防止条件竞争时。 (https://refactoring.guru/design-patterns/singleton/cpp/example)
【讨论】: