在C ++(C)中使用全局范围对象(结构)是否可以?

时间:2017-08-23 19:04:14

标签: c++ object

众所周知,不必要地使用全局变量是一个坏习惯,并且存在使范围尽可能小的倾向。

但物体怎么样?或者在C中构建类似函数的实例化。在多个源文件中使用全局对象有什么问题吗?

感谢你对这个问题进行了一些阐述,因为我有点......被破坏了。

1 个答案:

答案 0 :(得分:1)

摘要

全局标量类型变量是一种工具,工具不好或坏,它们的使用是恰当的还是不合适的。在该工具中添加类的功能并不好或坏,它有可能提高适当性或恶化适当性。

物件

答案需要对象的定义。对象不是变量的补充。变量的补码是常数。我将使用"标量类型"作为对象的补充。

使用全局标量类型变量的问题

似乎全局变量的问题通常都是

  • 非地方性
  • 没有约束检查
  • 耦合
  • 并发问题
  • 命名空间污染
  • 测试和调试

我认为,只要我们谈论标量类型,内存占用是一个被认为至少对于PC来说过时的论点,嵌入式可能是另一回事。

关于注释:常量没有所有这些问题,这就是为什么全局常量比全局变量更常见。

使用全局对象的问题

你必须问自己是否通过使用对象而不是标量类型变量消除了这些问题

所有这些问题也适用于对象。

另外,他们将所有类别的复杂性添加到最顶层,并使每一个反对意见都变得更糟,至少在一般情况下。

对于对象,您只有更多位置可以破坏所有内容,只有一些位置会阻碍副作用的调试。对象倾向于变得更复杂,增加了潜在的一致初始化问题。

对于对象,您突然不仅需要管理访问权限,而且还必须确保每个访问点都与对象的当前接口和基础数据类型的约束兼容。确保程序的某些部分正确管理所有权。

我认为这不是一个观点问题:如果你认为全局标量类型变量是坏的,你将不得不考虑全局对象是不好的。

cum grano salis

当然,全局标量类型变量以及全局对象都有合法且完全合理的应用。

如果几个全局变量在逻辑上连接,我认为在全局对象中捆绑这些连接可能会解决一些反对意见。例如。当您在对象中移动一些全局标量类型变量时,命名空间污染当然会减少。如果这些变量中存在一个不变量,那么全局对象的类就是你要寻找的第一个地方,而一个类绝对是编码那个不变量的最佳位置。 Setter可能是一种缓解缺失约束问题的工具。

相关问题