[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