gpt4 book ai didi

c++ - 我是否应该在所有对象需要它们时将我的服务定位器传递给它们?

转载 作者:太空狗 更新时间:2023-10-29 23:03:06 25 4
gpt4 key购买 nike

我最近决定服务定位器是一种不错的设计模式,可以访问我的游戏的重要管理器,例如世界管理器(可以生成实体并跟踪它们)和声音管理器。但是,我不确定访问服务定位器的最合适方式。我首先将一个指针传递到我在 main 中实例化的服务定位器,但这变得很乏味,因为我发现所有东西(射弹、玩家,一切!)在它的参数中都需要它。

我在这里问这个问题是因为我不认为它特定于游戏,但如果我错了,请告诉我。

我是否以错误的方式处理此模式?感谢您的宝贵时间。

编辑:单例能解决这个问题吗?他们有一个全局访问点,但我认为这不是最干净的解决方案。有任何想法吗?或者那会是最好的吗?

最佳答案

在这种情况下,使用全局变量(或单例)可能是合适的。您必须权衡使用全局变量/单例的缺点与不必几乎在所有地方都传递引用的便利性。如果您觉得缺点不太可能影响您的设计/代码,那么使用全局变量可以使您的代码更简洁。

使用全局变量的一些缺点是:

  • 管理全局对象的生命周期可能会更加困难。如果在不同的翻译单元(cpp文件)中定义了多个全局变量,它们实例化的顺序是不确定的,所以它们在实例化时最好不要相互依赖。一种解决方案是存储全局指针并在程序早期的某个位置实例化对象(例如在 main 中),但随后您必须确保在程序的销毁阶段不会创建悬空指针。
  • 您可能需要在多线程上下文中同步对全局变量的访问。对于全局变量,很难使用每线程对象(或代理)来避免同步访问。

单例的其他缺点可能是:

  • 无法创建您类(class)的拷贝,例如用于保存或撤消。

关于c++ - 我是否应该在所有对象需要它们时将我的服务定位器传递给它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26708522/

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