[fpc-pascal] Delegate Interface class does not seem to be referenced counted

Tony Whyman tony.whyman at mccallumwhyman.com
Wed Aug 10 15:04:21 CEST 2016


Marcos,

Thanks for the suggestions, but I had already tried the first variation:

    TMyClass = class(TInterfacedObject, IMyInterface)
    private
      FMyInterface: IMyInterface; // class type
      property MyInterface: IMyInterface
        read FMyInterface implements IMyInterface;
    public
      constructor Create(obj: IMyInterface);
      destructor Destroy; override;
    end;

and that did not work.

Destroying FMyInterface in the destructor does not make a difference - 
mainly because the TMyClass destructor is not being called anyway.

On 10/08/16 13:57, Marcos Douglas wrote:
> Hi,
>
> See the "problem" bellow:
>
> TMyClass = class(TInterfacedObject, IMyInterface)
>     private
>       FMyInterface: TDelegateClass; <<< HERE >>>
>       property MyInterface: TDelegateClass
>         read FMyInterface implements IMyInterface;
>     public
>       constructor Create(obj: TDelegateClass);
>       destructor Destroy; override;
>     end;
>
> and...
>
> procedure TDelegateTest.DoRun;
> var Intf: IMyInterface;
>      Intf2: IMyInterface;
> begin
>     Intf := TMyClass.Create(TDelegateClass.Create); <<< HERE >>>
>     Intf2 := TDelegateClass.Create;
>
> You're treating the instance using class types instead of interface type.
>
> You can:
>
> 1. Change FMyInterface: TDelegateClass to FMyInterface: IMyInterface;
> or
> 2. Destroy FMyInterface on destructor.
>
> Best regards,
> Marcos Douglas
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal




More information about the fpc-pascal mailing list