Einzelnen Beitrag anzeigen

dpg123

Registriert seit: 13. Apr 2015
22 Beiträge
 
Turbo Delphi für Win32
 
#1

Memory Leak bei Interface Delegation

  Alt 27. Okt 2016, 10:02
Delphi-Version: 2006
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ß!
  Mit Zitat antworten Zitat