Угу.. Вообще. Если такая структура создаётся и не разрывается программером, то живёт до конца жизни скрипта.
Но в последних версиях перла есть выход - так называемое ослабление ссылок. При этом для одного элемента из ссылаемых данных количество ссылок на 1 меньше "виртуальных ссылок". И при разрушении ключевого элемента структуры всё нормально освобождается - деструкторы вызываются.
В перле это выглядит так: { my ( %a, %b ); $a{x} = \%b; # ссылка на b $b{x} = \%a; # ссылка на a use Hash::Util 1.19 qw(weaken); weaken $b{x}; } # Все данные сносятся. Точнее освобождаются. Что при этом происходит с реально захаваной памятью - второй вопрос (к вопросу о malloc-е).
no subject
Date: 2008-09-04 07:47 pm (UTC)Но в последних версиях перла есть выход - так называемое ослабление ссылок. При этом для одного элемента из ссылаемых данных количество ссылок на 1 меньше "виртуальных ссылок". И при разрушении ключевого элемента структуры всё нормально освобождается - деструкторы вызываются.
В перле это выглядит так:
{
my ( %a, %b );
$a{x} = \%b; # ссылка на b
$b{x} = \%a; # ссылка на a
use Hash::Util 1.19 qw(weaken);
weaken $b{x};
}
# Все данные сносятся. Точнее освобождаются. Что при этом происходит с реально захаваной памятью - второй вопрос (к вопросу о malloc-е).