Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > освобождение памяти под интерфейс


Автор: NieL 4.1.2011, 12:09
вопрос: А нужно ли следить за памятью используемой интерфейсом? Вот, к примеру, метод в котором юзается интерфес IXMLDOMDocument.

Код

procedure Tlocal_upds_analyzer.local_upds_add(APack: TZIPForge);
var
 pack_hdr, Stylesheet: IXMLDOMDocument;
begin
 pack_hdr := CoDOMDocument;
 try
   pack_hdr_load(APack, pack_hdr);
   Stylesheet := CoDOMDocument.Create;
   try
     stylesheet_load(C_STYLESHEET_LOCAL_UPDS_ADD, Stylesheet);
     try
       pack_hdr.transformNode(Stylesheet);
     except
       raise; { TODO :  }
     end;
     with Flocal_upds.documentElement do
       appendChild(pack_hdr);
   finally
     Stylesheet := nil;
   end;
 finally
   pack_hdr := nil;
 end;

end;


Просмотрел полно примеров, в некоторых, по окончанию пользования интерфейсом сбрасываю его в nil, как в моем методе, в некоторых не сбрасывают. Проверял FastMM'ом, мемори лики, если не сбросить в nil, не фиксируются, занимаемая память вроде как освобождается. Внесите ясность.

Автор: Snowy 4.1.2011, 12:16
Интерфейс имеет счетчик ссылок.
Если все ссылки потеряны, то он автоматически уничтожается менеджером памяти.
Некоторые специально наследуют все свои классы от интерфейса, чтобы не заморачиваться с уничтожением.
Сброс ссылки в nil применяется для немедленного уничтожения.
P.S.  Это кстати, на тему сборки мусора в дельфи smile

Автор: NieL 4.1.2011, 12:55
Цитата(Snowy @ 4.1.2011,  12:16)
Если все ссылки потеряны, то он автоматически уничтожается менеджером памяти.

слышал, что теоретически должно так быть, но вот практически возникают утечки памяти.

Автор: Snowy 4.1.2011, 15:16
Если в этом случае есть утечки, значит не все ссылки умирают.
Значит кто-то где-то продолжает ссылаться.
Например, если создать ActiveX контрол, с указанием Owner'a
Вроде ссылок на контрол уже нет. Ан нет... Owner его по прежнему помнит.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)