我什么时候应该在 C++ 中使用单例类?

问题描述 投票:0回答:9

从 C++ 初学者的角度来看,我认为单例类有用的唯一原因与我想使用静态变量时类似。你们知道什么时候最适合使用单例类吗?

c++ singleton
9个回答
9
投票

唯一应该使用单例的情况是在极少数情况下,这些对象中只有一个是至关重要的。这种情况并不像您想象的那么频繁出现。

通常,只创建相关类的单个实例就足够了,但不需要放入强制对象唯一性所需的所有机制。

每次我使用单例(或者在我使用的代码库中找到一个)时,我最终都会将其删除,因为我需要改变行为,而单例机制却妨碍了我。我还没有在我们的代码(支付处理)中看到单例实际上有意义的情况。我遇到过很多情况,其中我只获得了特定类的一个实例,但没有一个情况下通过单例模式强制执行该实例是必要或有帮助的。


5
投票

当你真正需要它时,你就会知道。

这可能永远不会发生。

当您认为自己想要它时,您可能就错了。


4
投票

我想不出任何使用单例类是合适的实例。

在Java中,它们主要是为了组织。然而,在 C++ 中,您应该使用命名空间。


1
投票

我曾经使用 global 静态访问器创建单例:

UserRegistry::getInstance()
。现在,在依赖注入时代,我只使用注册表。也有助于单元测试。


0
投票

单例类是美化的全局变量。仅在绝对必要时使用,即当对象在整个实现范围内只有一个实例时。


0
投票

昨天黑客新闻上有一个帖子讨论了何时使用单例不是一个好主意。关于何时使用单例(全局配置数据、网络服务器应用程序中的会话管理)是一个好主意,有几个想法,但对于单例的每一个理由,也有很好的论据来解释为什么这不是一个好主意。 http://news.ycombinator.com/item?id=2743894


0
投票

我可以想到在游戏开发领域绝对需要将类实现为单例的几个原因:

物理引擎、精灵处理程序、重力处理程序(如果与物理引擎分开)、输入解析器等


0
投票

一切都可以解决,无需单例。但我发现自己使用它来更好地控制图形上下文等对象的初始化和销毁。或者当使用状态机更好地控制状态转换时。此外,在(罕见)情况下,系统资源仅限于 1 个单位(例如控制台),以及使用多线程来防止条件竞争。 (https://refactoring.guru/design-patterns/singleton/cpp/example


0
投票

您应该对将由多个对象调用的类使用单例,所有每个对象都需要引用该类,并且对该类对象的每个操作都应该影响整个程序,不允许特定组件具有不同的视图从相反的意义上来说,这正是对象实例所必需的。

在这些情况下,单例对于安全性和降低成本是必要的。我的意思是,您可以遍历许多对象并进行聚合或定义最新状态,但这没有多大意义,并且会增加循环和可能的内存重复,最好确保整个程序使用单个 Class 对象

© www.soinside.com 2019 - 2024. All rights reserved.