Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: несколько вопросов...   Andrey Sapozhnikov   01 Aug 2003 20:22:21 
 Re: несколько вопросов...   Denis Nikiforov   01 Aug 2003 23:58:35 
Архивное /ru.perl/31286dd57a5b0.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional