[Moscow.pm] weaken with функции
Alexander Lourier
aml на rulezz.ru
Пн Фев 28 00:48:02 PST 2011
В письме Monday 28 February 2011 09:49:51 Ivan Petrov написал:
> > > получается что каллбек цепляет ссылку на $self и из за него деструктор
> > > вызван не может быть до тех пор пока handle не уничтожится.
> > > в случае с просто ссылками - понятно: weaken на них. а здесь куда можно
> > > weaken натравить чтобы деструктор у такого объекта работал?
> >
> > После $self = shift; добавить weaken($self);
>
> В этом случае если эта работа делается внутри конструктора, то добавление
> такого weaken приводит к тому что вместо указателя на объект возвращается
> какая-то ахинея.
У вас объект уничтожается раньше, чем вы его присвоить успеваете. Такое может быть и не в конструкторе (даже в примере,
который вы приводили), если использовать класс так: "YourClass->new()->method()". Тогда и внутри не конструктора объект
уничтожится. Решение с my $self2 = $self; weaken($self2); рядом уже предложили.
--
Alexander Lourier, http://aml.rulezz.ru/
Подробная информация о списке рассылки Moscow-pm