Интерфейсный объект не всегда освобождается сам
Оформил: DeeCo
Автор: Suvorov Alexander
procedure SomeProc({const} A: IUnknown);
begin
// ...
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SomeProc(TInterfacedObject.Create);
end;
Подобный вызов SomeProc будет приводить к утечке памяти, если A передаётся
как Const или не используется в SomeProc.
КОММЕНТАРИЙ: Проверено:
D5, NT4, W2K.
Теряется 16 байт при каждом вызове.
Этот камень перенесен из категории КОМПИЛЯТОР.
Как выяснилось, здесь мы имеем дело с неочевидными особенностями правил
подсчета интерфейсных ссылок. Подробнее можно почитать главу справки:
Delphi Help - > Programming with Delphi - >
Common programming tasks - >
Using reference counting
|