【发布时间】:2014-11-07 15:41:19
【问题描述】:
我需要知道为什么我们需要避免循环依赖? 如果我们认为,在现实世界中,循环依赖非常重要。就像一个朋友需要另一个朋友的东西,另一个需要这个朋友的东西,所以它是一种循环,对吗?
那么为什么循环依赖是一个糟糕的设计呢? 如果我们真的需要避免这种情况,那么对于这种情况,面向对象世界中最好的设计是什么?
【问题讨论】:
-
根据我的经验,循环引用的主要问题是内存管理——谁拥有什么?
-
它既不好也不坏:就是这样。如果觉得必须,请注意内存泄漏。
-
上次我检查(也就是我必须编译它)
llvm项目全部用于循环依赖,他们正在编写一个虚拟机/编译器。您可以以此为例,也许会问他们为什么要采用这种设计。 -
让我们以头文件为例:头文件A需要头文件B中的东西才能工作,而头文件B需要头文件A中的东西才能工作。但是头文件B不能包含头文件A,因为头文件A需要先包含B,而B首先需要包含A,以此类推。这是一个典型的循环依赖,在 C 和类似语言的初学者中很常见。
-
你的例子“......一个朋友需要其他朋友的东西,另一个需要这个朋友的东西......”不是依赖,除非第一个朋友不能做第二个需要的东西,除非他们提供第一个朋友需要的东西。在没有依赖关系的情况下,任何一方都可以随时为另一方提供服务。因此,通常,您希望避免循环依赖。
标签: c++ c circular-dependency