在阅读了关于这个主题的一些 SO 主题之后:我想出了这些为什么全局变量/单例不好的原因。
- 理解全局状态的函数变得越来越困难,随着代码的增长,越来越多的函数将修改该全局状态。
- 它使单元测试更难。
- 它隐藏了依赖关系。
- 如果有一天你的全局变量实际上不是一个单一的对象/变量,你将不得不重写代码。
我想用 C++ 制作一个游戏,会有一个“高度图对象”将我的游戏中的世界景观表示为高度图。这个高度图可以改变。我想为它使用一个全局对象。(我不希望遇到静态初始化顺序问题,因为不会有任何其他静态变量引用此高度图对象)。
现在,由于上述原因,我知道全局状态很糟糕,而全局可变状态更糟。但是这样做似乎真的非常麻烦:在main()
范围内创建一个高度图对象,并将该高度图对象传递给每个想要使用它的函数。
如果我 100% 确定我的应用程序中只有一个高度图怎么办?此外,由于这是一个小型的单独项目,我相信我将能够理解每个函数对全局状态的作用?而且我看不出在这种情况下使用全局变量会如何损害单元测试。如果我想使用模拟高度图,我不能globalHeightmap = generateMockHeightmap();
在调用我想测试的函数之前做吗?