gpt4 book ai didi

c++ - 在 C++ 游戏中使用单例资源管理器

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:38 25 4
gpt4 key购买 nike

我已经和我的公司一起开发游戏好几年了。然而,最近我们一直在改进我们游戏基本系统,以使 future 的添加更容易。我们所做的一项更改是添加资源管理器,而不是手动加载屏幕类中的信息,这些信息本质上是游戏状态。我们决定将其实现为单例。然而,我知道在编程社区中使用单例的争议。我将在下面举例说明我们如何使用我们的字体管理器。我想知道在这种情况下是否可以接受单例,或者您是否会推荐其他方法。

mTextToBeDrawn.setFont(FontManager::GetInstance()->GetFont("Default"));

我愿意接受所有建议,我将解释当前的OOP 设计,以便更深入地了解系统。每个管理器都从一个名为管理器的基类扩展而来,具有通用的添加和删除方法。然后在派生类中实现添加和删除方法。这些类只需要一个实例,因为游戏只需要一个状态管理器、字体管理器等。所以我应该使用单例还是应该使用其他方法来创建更好的代码。

最佳答案

在编程社区中,我们经常听到“使用 X 不好”或“使用 X 好”,但仅仅将某些东西标记为坏或好并不能完全解释它的优点和缺点,或者某些东西可能有什么问题或如何正确使用它。如果您不明白为什么某些东西可能是坏的,那么当它以其他形式或以不同的名称出现时,您很可能不会注意到它。

在您的单例示例中,我会做一些研究以确定使用单例的批评和陷阱,并评估它们是否会对您造成问题。

我最担心的两个问题是:

  1. 单例引入全局数据和全局状态。

    使用全局数据,访问和修改可能发生在整个代码中,这使得错误难以追踪,并且更容易陷入困惑状态。单例通常是设计不当的结果。

  2. 单例通常不是线程安全的。

在某些应用程序中,陷阱并没有真正成为问题。在 Cocoa/Objective-C 世界中,Apple 偶尔会使用 Singletons 来解决在我看来完全适合这项工作的问题。它们的一些用法与您描述的类似,例如图像管理/缓存。

您可以在此处阅读更多信息 What is so bad about singletons?

关于c++ - 在 C++ 游戏中使用单例资源管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com