|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Denis Nikiforov 2:5010/70 01 Aug 2003 23:58:35 To : Andrey Sapozhnikov Subject : Re: несколько вопросов... -------------------------------------------------------------------------------- Hello, Andrey! You wrote to Denis Nikiforov on Fri, 01 Aug 2003 19:22:21 +0600: DN>>>> 1) DN>>>> если создать объект некоторого класса и не записать ссылку на него в DN>>>> конкретную переменную: DN>>>> HTML::LinkExtor->new(); DN>>>> то как долго проживёт этот объект? DN>>>> если я, например, в цикле создаю такие "анонимные" объекты: DN>>>> for (;;) { DN>>>> HTML::LinkExtor->new(); DN>>>> } DN>>>> то они скапливаются где-то в памяти или уничтожаются по завершении DN>>>> каждой итерации цикла, или по завершении всего цикла? AC>>> Как придется. Hе следует полагаться как на то, что они будут AC>>> уничтожены сразу по окончании оператора (а отнюдь не итерации цикла), AC>>> так и на то, что они доживут до конца цикла. Тем более что до конца AC>>> вечного цикла дожить невозможно. Hо скорее всего, на практике будут AC>>> убиваться по завершении каждой итерации цикла. ??>> понятно, такая неопределённость, имхо, не красит язык/интерпретатор AS> perldoc perltoot //.....skiped..... AS> подытоживая сказанное - сборщик мусора почистит Ваши объекты как AS> только сочтет это нужным но не ранее того, как пропадет последняя AS> ссылка на Ваш объект. AS> А еще (это я уже от себя) она может пропасть позже чем Вы думаете. AS> Hапример Вы написали нечто в последней строке функции, от которой AS> не ждете никакого возвращаемого значения. Однако значения последнего AS> выражения (кстати, Вы тоже можете не предполагать, что данное AS> выражение возвращает значение. Hапример my $x = Class->new; не AS> только присваивает переменной $x значение, но и возвращает его) AS> будет помещено в стек возвращаемых значений и разрушение объекта AS> будет отложено. AS> Если разрушение в указанный момент так важно по каким-либо причинам, AS> опишите его как собственный метод (скажем close, stop или finish) и AS> вызывайте явно. Сборщик мусора в Perl потом подберет "пустую шкурку AS> мертвого объекта". Пожалуй я погорячился с предыдущим высказыванием :-) Вроде бы я понял: Если при создании объекта, ссылка на него не была записана в переменную, это не означает что ссылка пропала. Только вопрос сколько проживёт эта ссылка. С переменными вроде бы всё более-менее однозначно - у них есть конкретная область видимости и время жизни. Видимо, время жизни такой "анонимной" ссылки зависит от конкретной реализации интерпретатора, и простым смертным не стоит заморачиваться на это :-) With best regards, Denis Nikiforov. E-mail: denis@ural.org 31 C9 31 DB 41 43 43 29 D8 7F F9 C3 --- Microsoft Outlook Express 6.00.2800.1106 * Origin: Ural RELCOM Ltd. (2:5010/70) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/31286dd57a5b0.html, оценка из 5, голосов 10
|