Hello zusammen,
arbeite mich gerade in das Thema Interfaces, deren Delegation und Reference Counting ein. Beim Experimentieren bin ich auf folgendes Minimalbsp gestoßen, bei dem mir FastMM ein Memory Leak anzeigt und ich habe keinen Schimmer warum und wie ich es weg bekomme
Delphi-Quellcode:
type
IMyInterface = interface
end;
TMyClass = class(TInterfacedObject, IMyInterface)
end;
TMyWrapper = class(TInterfacedObject, IMyInterface)
FMyInterface: IMyInterface;
property MyInterface: IMyInterface read FMyInterface implements IMyInterface;
end;
Aufruf:
Delphi-Quellcode:
procedure Test;
var
MyInterface: IMyInterface;
begin
MyInterface := TMyWrapper.Create(); // <- mit dieser Zeile Memory Leak
// MyInterface := TMyClass .Create(); // <- mit dieser Zeile KEIN Memory Leak
end;
Man beachte, dass ich mit FMyInterface in TMyWrapper noch nichts gemacht habe! Alleine durch das Deklarieren der Property geht anscheinend iwas beim Reference Counting schief...
FastMM meldet:
Zitat:
---------------------------
Test.exe: Memory Leak Detected
---------------------------
This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):
5 - 12 bytes: TMyWrapper x 1
Was mache ich falsch? Mit FMyInterface passiert nichts, es gibt keinen Zugriff auf die property. Wo ist der Unterschied zur TMyClass-Zeile, bei der das Reference Counting funktioniert? Wie delegiere ich richtig?
Dank und Gruß!