-
Есть к примеру два интерфейса:
IIntrFirst = interface procedure JoinIntSecond(I: IUnknown); end;
IIntrSecond = interface procedure JoinIntFirst(I: IUnknown); end;
Реализция: TIntrFirst = class(IIntrFirst) FSecond: IUnknown; procedure JoinIntSecond(I: IUnknown); end; procedure TIntrFirst.JoinIntSecond(I: IUnknown); begin FSecond := I; end;
TIntrSecond = class(IIntrFirst) FFirst: IUnknown; procedure JoinIntFirst(I: IUnknown); end; procedure TIntrFirst.JoinIntFirst(I: IUnknown); begin FFirst:= I; end;
Затем следующий код: First.JoinIntSecond(Second); Second.JoinIntSecond(First); First := nil; Second := nil;
После этого объекты освободятся?
-
Ну в твоем случае вообще ни в каком случае не освободится поскольку ничего из IUnknown ты не реализовал а Пушкин за тебя это делать не будет ;-)
Приведи более конкретный пример.
-
...но если бы ты их унаследовал от TInterfacedObject... А вообще, практика - критерий истины. Самому посмотреть, вызывается ли _AddRef при присваивании FFirst:= I, вызывается ли деструктор при First:= nil, намного полезнее и познавательнее, чем спрашивать на форуме
|