folgender kleiner Test läuft bei Delphi problemlos durch, bei Freepascal gibt es einen SIGSEGV. Wenn man vorher die Interface-Variable auf nil setzt, funktioniert dies auch bei Freepascal. Welches Verhalten ist das richtigere? Ich sehe Argumente für beide Features:
Code: Alles auswählen
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils, Classes;
type
ITestInterface = interface
['{DC209DB2-6E2D-4680-93D6-5D9B3983C0D3}']
function OnlyDummy: integer;
end;
TFoo = class
public
Intf: ITestInterface;
end;
{ TBar }
TBar = class(TComponent, ITestInterface)
public
function OnlyDummy: integer;
end;
{ TBar }
function TBar.OnlyDummy: integer;
begin
Result := -1;
end;
var
Foo: TFoo;
Bar: TBar;
begin
// ReportMemoryLeaksOnShutdown := true;
Foo := TFoo.Create;
Bar := TBar.Create(nil);
Foo.Intf := Bar;
// Foo.Intf := nil;
Bar.Free;
Foo.Free;
end.