[fpc-pascal] Delegate Interface class does not seem to be referenced counted
Graeme Geldenhuys
mailinglists at geldenhuys.co.uk
Wed Aug 10 17:43:55 CEST 2016
On 2016-08-10 13:42, Tony Whyman wrote:
> In the example, TMyClass is the interface class doing the delegation and
> while TDelegateClass is being destroyed when it goes out of scope,
> TMyClass is not.
Maybe I'm missing something, but here is a quick example I put together.
Testing with FPC 2.6.4 under FreeBSD and classes are created and freed
as they are supposed to.
Here is the console output:
$ ./test2
Creating TMyClass
Creating TMyInterface
TMyInterface.P1
TMyInterface.P2
Destroying TMyClass
Destroying TMyInterface
And the code for the test project.
===================[ test2.pas ]=======================
program test2;
{$mode objfpc}{$H+}
{ Delegating to an interface-type property }
type
IMyInterface = interface
procedure P1;
procedure P2;
end;
TMyInterface = class(TInterfacedObject, IMyInterface)
private
procedure P1;
procedure P2;
public
constructor Create;
destructor Destroy; override;
end;
TMyClass = class(TObject, IMyInterface)
FMyInterface: IMyInterface;
property MyInterface: IMyInterface read FMyInterface implements
IMyInterface;
public
constructor Create;
destructor Destroy; override;
end;
procedure TMyInterface.P1;
begin
writeln('TMyInterface.P1');
end;
procedure TMyInterface.P2;
begin
writeln('TMyInterface.P2');
end;
constructor TMyInterface.Create;
begin
writeln('Creating ',ClassName);
end;
destructor TMyInterface.Destroy;
begin
writeln('Destroying ',ClassName);
inherited Destroy;
end;
var
MyClass: TMyClass;
MyInterface: IMyInterface;
{ TMyClass }
constructor TMyClass.Create;
begin
writeln('Creating ',ClassName);
end;
destructor TMyClass.Destroy;
begin
writeln('Destroying ',ClassName);
inherited Destroy;
end;
begin
MyClass := TMyClass.Create;
MyClass.FMyInterface := TMyInterface.Create; // some object whose
class implements IMyInterface
MyInterface := MyClass;
MyInterface.P1;
MyInterface.P2;
MyClass.Free;
end.
========================[ end ]========================
Regards,
Graeme
--
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://fpgui.sourceforge.net/
My public PGP key: http://tinyurl.com/graeme-pgp
More information about the fpc-pascal
mailing list