Что такое «слабые ссылки» в KiokuDB? - PullRequest
0 голосов
/ 25 октября 2010

Какие именно слабые ссылки упоминаются в руководстве по KiokuDB ?

Чем они отличаются от «обычных» ссылок?

1 Ответ

6 голосов
/ 25 октября 2010

Обычная ссылка предотвращает сбор мусора. Слабая ссылка похожа на нормальную ссылку, но не мешает сборке мусора. Когда удаляется последняя нормальная ссылка на сущность, она собирает мусор, и любые слабые ссылки на нее становятся undef.

Это полезно, если у вас есть круговые ссылки. Сборщик мусора с подсчетом ссылок (как в Perl) не может удалить объекты с циклическими ссылками, потому что их счетчик ссылок никогда не будет равен 0.

Например, рассмотрим древовидную структуру, где родительские узлы имеют ссылки на свои дочерние узлы, а дочерние узлы имеют ссылку на своих родительских. Сделав слабые дочерние ссылки, дерево будет автоматически собирать мусор, когда на него нет внешних ссылок.

В Perl слабые ссылки могут быть созданы с помощью функции weaken в Scalar :: Util . Moose также позволяет помечать атрибуты как weak_ref .

...