0

KiokuDB 教程 提到的弱引用到底是什么?

它们与“正常”参考有何不同?

4

1 回答 1

6

正常引用可防止被引用的事物被垃圾收集。弱引用类似于普通引用,但不会阻止垃圾回收。当删除对实体的最后一个正常引用时,它会被垃圾收集,并且对它的任何弱引用都会变成undef.

如果您有循环引用,这很有用。引用计数垃圾收集器(就像 Perl 使用的那样)不能删除带有循环引用的东西,因为它们的引用计数永远不会变为 0。

例如,考虑一个树结构,其中父节点引用其子节点,子节点引用其父节点。通过弱化子到父引用,当没有外部引用时,树将自动被垃圾收集。

在 Perl 中,可以使用Scalar::Util 中weaken函数创建弱引用。 Moose还允许您将属性标记为weak_ref

于 2010-10-25T18:45:35.703 回答