4
$a=\$a;

我正在阅读的书说在这种情况下$a永远不会免费,我的问题是为什么 perl 解释器不在编译时修复它?当它发现它指向自己时,不要增加引用计数。

为什么 perl 不这样做?

4

1 回答 1

6

一些垃圾收集器有循环检测;Perl,出于性能和历史原因,没有。如果您想要一个不影响引用计数的引用,您可以使用Scalar::Util::weaken来获取弱引用,这在您需要依赖它的大多数情况下消除了循环检测的需要。解释器中需要内置循环检测,以自动检测\$a应该是弱引用还是强引用,因此您只需要明确地进行即可。

于 2011-06-23T03:31:21.283 回答