Конференция "Прочее" » Время жизни объекта.
 
  • Дмитрий_С (13.07.08 19:15) [0]
    Есть к примеру два интерфейса:

    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;

    После этого объекты освободятся?
  • Sergey Masloff (13.07.08 20:01) [1]
    Ну в твоем случае вообще ни в каком случае не освободится поскольку ничего из IUnknown ты не реализовал а Пушкин за тебя это делать не будет ;-)

     Приведи более конкретный пример.
  • DrPass © (13.07.08 20:09) [2]
    ...но если бы ты их унаследовал от TInterfacedObject...
    А вообще, практика - критерий истины. Самому посмотреть, вызывается ли _AddRef при присваивании FFirst:= I, вызывается ли деструктор при First:= nil, намного полезнее и познавательнее, чем спрашивать на форуме
 
Конференция "Прочее" » Время жизни объекта.
Есть новые Нет новых   [134439   +46][b:0][p:0]