Версия для печати
ПРОГРАММИСТ.Интерфейсный объект не всегда освобождается сам
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=609Suvorov 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