KiokuDB チュートリアルで言及されている弱参照とは正確には何 ですか?
それらは「通常の」参照とどう違うのですか?
通常の参照は、参照されているものがガベージコレクションされるのを防ぎます。弱参照は通常の参照に似ていますが、ガベージコレクションを妨げることはありません。エンティティへの最後の通常の参照が削除されると、ガベージコレクションが行われ、エンティティへの弱い参照はすべてになりundef
ます。
これは、循環参照がある場合に役立ちます。参照カウントガベージコレクター(Perlが使用するような)は、参照カウントが0になることはないため、循環参照を持つものを削除することはできません。
たとえば、親ノードが子ノードへの参照を持ち、子ノードが親への参照を持っているツリー構造について考えてみます。子から親への参照を弱くすることにより、ツリーへの外部参照がない場合、ツリーは自動的にガベージコレクションされます。
Perlでは、Scalar::Utilのweaken
関数を使用して弱参照を作成できます。 Mooseでは、属性をweak_refとしてマークすることもできます。