KiokuDB 教程 提到的弱引用到底是什么?
它们与“正常”参考有何不同?
正常引用可防止被引用的事物被垃圾收集。弱引用类似于普通引用,但不会阻止垃圾回收。当删除对实体的最后一个正常引用时,它会被垃圾收集,并且对它的任何弱引用都会变成undef
.
如果您有循环引用,这很有用。引用计数垃圾收集器(就像 Perl 使用的那样)不能删除带有循环引用的东西,因为它们的引用计数永远不会变为 0。
例如,考虑一个树结构,其中父节点引用其子节点,子节点引用其父节点。通过弱化子到父引用,当没有外部引用时,树将自动被垃圾收集。
在 Perl 中,可以使用Scalar::Util 中的weaken
函数创建弱引用。 Moose还允许您将属性标记为weak_ref。