title: Delphi interface implements
body: <p>I would expect that the reference counting should work on the outer aggregating object in an interface implementation. 
  If I can refer to another example: <a href="https://stackoverflow.com/questions/6836425/clarity-in-classes-implementing-multiple-interfaces-alternative-to-delegation">Clarity in classes implementing multiple interfaces (alternative to delegation):</a></p>
  
  <p>Here is a minimal reproduction of the behaviour:</p>
  
  <pre><code>program SO16210993;
  
  {$APPTYPE CONSOLE}
  
  type
    IFoo = interface
      procedure Foo;
    end;
  
    TFooImpl = class(TInterfacedObject, IFoo)
      procedure Foo;
    end;
  
    TContainer = class(TInterfacedObject, IFoo)
    private
      FFoo: IFoo;
    public
      constructor Create;
      destructor Destroy; override;
      property Foo: IFoo read FFoo implements IFoo;
    end;
  
  procedure TFooImpl.Foo;
  begin
    Writeln('TFooImpl.Foo called');
  end;
  
  constructor TContainer.Create;
  begin
    inherited;
    FFoo := TFooImpl.Create;
  end;
  
  destructor TContainer.Destroy;
  begin
    Writeln('TContainer.Destroy called');//this line never runs
    inherited;
  end;
  
  procedure Main;
  var
    Foo : IFoo;
  begin
    Foo := TContainer.Create;
    Foo.Foo;
  end;
  
  begin
    Main;
    Readln;
  end.
  </code></pre>
  
  <p>If instead of using <code>implements</code>, I implement the interface in the <code>TImplementor</code> class then the destructor runs.</p>