Hallo,
ich verstehe es nicht ganz, wann das Reference-Counting der Interfaces genutzt wird. Also,
Beispiel:
Code:
ITest = interface(IInterface)
procedure CallInterface(testObject: ITest);
end;
TTest = class(TInterfacedObject, ITest)
public
procedure CallInterface(testObject: ITest);
procedure CallInstance(testObject: TTest);
end;
procedure TForm1.Test();
var
testInterface: ITest;
testInstance: TTest;
begin
// Funktioniert.
testInstance := TTest.Create;
testInstance.CallInstance(testInstance);
testInstance.Free;
// Interface wirft Fehler, obwohl immer nach TTest gecastet wird
testInterface := TTest.Create;
(testInterface as TTest).CallInstance(testInterface as TTest);
(testInterface as TTest).Free; // Fehler
// auch wenn ich mit einer Klasseninstanz arbeite, diese aber an eine Funktion übergeben, die das Interface erwartet, gibt es Fehler.
// Es wird doch kein neues Objekt erzeugt, sondern nur die Referenz an die Funktion übergeben
testInstance := TTest.Create;
testInstance.CallInterface(testInstance);
testInstance.Free; // Fehler
end;
Kann mir jemand erklären, wann das Reference-Counting genutzt wird?