|
1
70
之间的循环依赖关系 不一定有害。事实上,在某些情况下,它们是可取的。例如,如果您的应用程序处理宠物及其所有者,则您希望Pet类有一个方法来获取宠物的所有者,而所有者类有一个方法返回宠物列表。当然,这会使内存管理更加困难(在非GC语言中)。但是,如果循环性是问题固有的,那么试图消除它可能会导致更多的问题。 另一方面,它们之间存在循环依赖关系 模块
|
|
|
2
58
循环引用并不总是有害的 -在一些用例中,它们可能非常有用。我想到了双链表、图形模型和计算机语言语法。但是,作为一般实践,有几个原因可以解释为什么要避免对象之间的循环引用。
|
|
|
3
8
因为现在它们实际上是一个单一的物体。你不能单独测试任何一个。 如果你修改了一个,很可能你也会影响到它的同伴。 |
|
|
4
7
来自维基百科:
|
|
|
5
5
二者都 包装 也就是说,这些都是可以克服的,通常需要循环数据。现实世界不是由整洁的有向图组成的。很多图,树,地狱,一个双链表是循环的。 |
|
6
2
这会损害代码的可读性。从循环依赖到意大利面代码,这只是一小步。 |
|
|
7
2
考虑下面的例子:
首先调用哪个构造函数?真的没有办法确定,因为它完全是模棱两可的。将对未初始化的对象调用一个或另一个DoSomething方法,从而导致错误行为,很可能引发异常。有很多方法可以解决这个问题,但它们都很难看,而且都需要非构造函数的初始值设定项。 问题2:
乍一看,人们可能会认为这段代码是正确的。参考计数代码非常简单和直接。但是,此代码会导致内存泄漏。构造时,它最初的引用计数为“1”。但是,封装的myB变量会增加引用计数,使其计数为“2”。释放localA时,计数将递减,但仅返回到“1”。因此,该对象保持挂起状态,并且从不删除。 正如我前面提到的,.NET并没有真正使用引用计数进行垃圾收集。但它确实使用类似的方法来确定对象是否仍在使用,或者是否可以删除它,并且几乎所有这些方法都会被循环引用弄糊涂。NET垃圾收集器声称能够处理这个问题,但我不确定我是否信任它,因为这是一个非常棘手的问题。另一方面,Go通过根本不允许循环引用来绕过这个问题。十年前,我更喜欢.NET方法的灵活性。这些天来,我发现自己更喜欢Go方法,因为它简单。 |
|
|
8
1
|
|
|
9
1
参考LakOSS书,在C++软件设计中,循环物理依赖是不可取的。有几个原因
|
|
|
10
1
循环引用似乎是一种合法的领域建模场景。例如Hibernate和许多其他ORM工具鼓励实体之间的这种交叉关联,以实现双向导航。在在线拍卖系统中的典型示例中,卖家实体可以维护对他/她正在出售的实体列表的引用。而且每个项目都可以维护对其相应卖方的引用。 |
|
|
11
-2
NET垃圾收集器可以处理循环引用,因此在.NET framework上工作的应用程序不必担心内存泄漏。 |
|
|
simply lemon · python上链表的添加方法 1 年前 |
|
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 1 年前 |
|
|
P N Singh · 在CPP Oops中调用对象而不创建它 1 年前 |
|
|
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 1 年前 |
|
|
Andy Votava · 从父类定义调用学生方法 1 年前 |