[Moscow.pm] Как народ борится с глобальным деструктором
Alexander Lourier
aml на rulezz.ru
Ср Май 21 05:10:14 PDT 2008
В сообщении от 21 мая 2008 16:04 Ivan B. Serezhkin написал(a):
> Alexander Lourier wrote:
> > В сообщении от 21 мая 2008 15:55 Ivan B. Serezhkin написал(a):
> >> Alexander Lourier wrote:
> >>> Используйте слабые ссылки с B в A, тогда A уничтожится первым.
> >>
> >> Там как раз обратная ситуация.
> >
> > Почему обратная? Если ссылка с B на A слабая, то первым вызовется
> > A::DESTROY, он сможет все корректно сделать, объект A умрет и освободит
> > B. Или я неправ?
>
> Всё так, но я не думаю что грамотный программист будет делать слабыми
> ссылки на детей.
1. Никто не сказал, что A и B это дети.
2. Как раз ссылка на родителя, по логике, должна быть слабой, именно тогда
родитель первым сможет разрушиться, пока его дети целые и можно ими
попользоваться. Деструкторы детей будут вызываться после родителя, и они
должны корректно обрабатывать ситуацию !defined($self->{parent}).
> Слабыми должны быть ссылки на парентов и только.
> Нормальному человеку врятли придёт в голову сделать иначе.
В особо изощренных ситуациях, наверное, имеет смысл инкапсулировать A и B в
еще какой-то класс, который будет знать ссылки на них, и в своем деструкторе
вручную разруливать порядок разрушения.
--
Alexander Lourier, http://aml.rulezz.ru
Подробная информация о списке рассылки Moscow-pm