在阅读了关于这个主题的SO线程之后:我想出了为什么全局变量/单例不好的原因。我可以在这种情况下使用全局变量吗?
- 随着代码的增长,越来越多的函数将修改该全局状态,全局状态越来越难理解。
- 它使单元测试更难。
- 它隐藏了依赖关系。
- 如果有一天事实证明你的全局变量实际上不是一个单一的对象/变量,你将不得不重写代码。
我想用C++做一个游戏,并且会有一个“高度图对象”,它表示我的游戏中的世界景观为高度图。此高度图可以更改。我想为它使用全局对象。 (我不希望遇到静态初始化顺序问题,因为不会有任何其他静态变量引用此高度图对象)。
现在,我知道全局状态不好,全局可变状态更糟糕,因为上述原因。但是看起来确实非常麻烦:做一个main()
作用域的高度图对象,并将该高度图对象传递给每一个想要使用它的函数。
如果我100%确定应用程序中只有一个高度图,该怎么办?另外,由于这是一个小型的独立项目,我相信我能够理解每个功能对全球状态所做的事情?我不明白在这种情况下如何使用全局变量会影响单元测试。如果我想使用模拟高度图,在调用我想测试的函数之前,我不能仅仅执行globalHeightmap = generateMockHeightmap();
吗?
最有可能的情况是,高度图只是您的函数在其中运行的上下文的一部分。它应该与其他情况分组,而不是单独处理。 – 2012-07-08 04:38:06
“但是看起来确实很麻烦,可以做另一种选择”如果这看起来很麻烦,那么你的代码架构不好。 – 2012-07-08 04:38:07
只是举一个David Schwartz正在谈论的具体例子 - 创建一个包含高度图的类,并使需要访问高度图的函数成为此类的成员,以便您不必通过高度图明确。 – 2012-07-08 06:44:46