$a=\$a;
我正在读的这本书说在这种情况下$a
永远不会自由,我的问题是为什么perl解释器在编译时没有解决它?当它发现它指向自身时,不要增加引用计数。
为什么perl不这样做?
答案 0 :(得分:6)
一些垃圾收集器有循环检测;出于性能和历史原因,Perl没有。如果您想要一个不影响引用计数的引用,可以使用Scalar::Util::weaken
获取弱引用,这样就无需在需要依赖它的大多数情况下进行周期检测。需要在解释器中内置循环检测,以自动检测\$a
是否应该是弱引用或强引用,因此您只需要明确地执行此操作。