C,设计:删除全局对象

时间:2011-07-09 19:01:40

标签: c global-variables

我正在创建一个小型Avida风格的生活模拟。我从单个文件中开始使用一个非常基本的,全部是全局的600行程序来测试一些想法,现在我想创建一个真正的设计。

除此之外,我还有一个全局配置对象,其他每个函数都有一些东西。现在,我必须本地化对象并传递指针。事实上,大多数人都需要这个对象。我想到了三种可能的解决方案:

  • a)保留配置对象 全球的(最简单的,但不是真的 溶液)

  • b)将指针存储在各处 需要(很容易,虽然浪费 记忆,因为一些小 普通的旧数据结构需要 它)。

  • c)为POD类型创建工厂 需要访问选项,并有 工厂执行所有操作 它们。

在我的想法中,只有(c)听起来合乎逻辑,但我不想让这种结构不必要地复杂化。你们会做什么?

我对新想法很满意,并会提供有关您想要了解的计划的任何信息。

提前致谢!

3 个答案:

答案 0 :(得分:3)

我必须同意@Carl Norum:您现在拥有的全局配置设置没有任何问题。你说每个人都“从中得到了一些东西”。如你所知,当每个人都将写入时,全局变量就会出现问题。在您的情况下,全局需要配置信息,因此 全局。

如果你想让它更加分离和保护 - 稍微不那么全局化 - 那么为什么不添加一些读/写访问例程。

请注意,在任何地方存储指针并不能真正解决问题:它只会添加一层间接,只会伪装或伪装实际上使您紧张的全局访问。额外的间接层将为 juuuuust 添加足够的空间,以便 juuuuust 一个小小的小虫虫进入。

所以,底线:如果东西自然是全球性的,那么使全局化,并且不要担心通常普遍接受的智慧,这种智慧大多是正确的,但在你的应用中可能不是正确的。总是受到CS老师提出的规则/宣传的约束,imo是愚蠢一致性的完美例子。

答案 1 :(得分:2)

全局变量非常棒。花时间实际完成任务而不是无缘无故重构。我工作的每家公司都使用严重

问问自己,你是否真的通过将它移动到你到处传播的物体来获得任何东西。不妨为自己节省额外的复杂性。

答案 2 :(得分:0)

转到B,除非分析证明它是一个问题。在大多数机器上,存储指针所需的内存非常非常简单。