Если, спустя месяц, это все же кому-то нужно - то пример.
Если сделать так:
- Код: Выделить всё
type
TSomeObject = class
procedure DoSomething;
end;
var
SomeObject: TSomeObject;
begin
SomeObject := TSomeObject.Create;
SomeObject.DoSomething;
end.
Будет утечка памяти, потому что не вызван SomeObject.Free.
Если же сделать так:
- Код: Выделить всё
type
ISomeObject = interface
procedure DoSomething; // реализация не нужна
end;
TSomeObject = class(TInterfacedObject, ISomeObject)
procedure DoSomething; // реализация нужна
end;
var
SomeObject: ISomeObject;
begin
SomeObject := TSomeObject.Create;
SomeObject.DoSomething;
end.
То утечки не будет, потому что SomeObject - интерфейсная переменная, ссылки на нее считаются автоматически и как только последняя ссылка (т.е. сама SomeObject) выйдет из зоны видимости (т.е. выполнение уйдет за
end), TSomeObject.Free будет вызван автоматически.
Управление памятью на интерфейсах подробнее описано например тут:
http://softwaremaniacs.org/blog/2005/05 ... anagement/А вообще, имхо, для устранений утечек лучше использовать heaptrc, чем управление памятью на интерфейсах.