Версия для печати


ПРОГРАММИСТ.Интерфейсный объект не всегда освобождается сам
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=609

Suvorov Alexander
дата публикации 08-07-2002 17:26

КАТЕГОРИЯПРОГРАММИСТ .Интерфейсный объект не всегда освобождается сам
ПРОДУКТ
ПЛАТФОРМА


procedure SomeProc({const} A: IUnknown);
begin
  // ...
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SomeProc(TInterfacedObject.Create);
end;
Подобный вызов SomeProc будет приводить к утечке памяти, если A передаётся как Const или не используется в SomeProc.


Дополнительные ссылки и прилагаемые файлы
Вопрос КС, в обсуждении которого приведен пример с AV при аналогичных начальных условиях: http://www.delphikingdom.com/asp/answer.asp?IDAnswer=39372


Комментарий
Проверено: D5, NT4, W2K.
Теряется 16 байт при каждом вызове.

Этот камень перенесен из категории КОМПИЛЯТОР.
Как выяснилось, здесь мы имеем дело с неочевидными особенностями правил подсчета интерфейсных ссылок. Подробнее можно почитать главу справки Using reference counting