[Moscow.pm] Как народ борится с глобальным деструктором
Alexander Lourier
aml на rulezz.ru
Ср Май 21 04:44:20 PDT 2008
В сообщении от 21 мая 2008 14:31 Dmitry Nizovtsev написал(a):
> Здраствуйте
> Проблема в следущем есть обьект A который содержит ссылку на обьект B.
> В деструкторе обьекта A используется ссылка на обьект B - всё хорошо
> работает пока дело не доходит до глобального десктруктора. Глобальный
> деструктор уничожает обьект B раньше обьекта A и естественно обьект A не
> может выполнить всех необхдимых действий в своём деструкторе.
> Что народ может посоветовать в таком случае?
Используйте слабые ссылки с B в A, тогда A уничтожится первым.
perldoc Hash::NoRef
==
NAME
Hash::NoRef - A HASH that store values without increase the reference
count (weak references).
DESCRIPTION
This HASH will store it’s values without increase the reference count.
This can be used to store objects but
without interfere in the DESTROY mechanism, since the reference in this
HASH won’t count.
USAGE
use Hash::NoRef ;
my %hash ;
tie(%hash , ’Hash::NoRef’) ;
...
## Or getting a HASH ref tied:
my $hash = new Hash::NoRef() ;
{
my $obj = new FOO() ;
$hash->{obj} = $obj ;
## When we exit this block $obj will be destroied,
## even with it stored in $hash->{obj}
}
$hash->{obj} ## is undef now!
==
--
Alexander Lourier, http://aml.rulezz.ru
Подробная информация о списке рассылки Moscow-pm