Factory-Muster, Speicherleck

8

Ich lese Hodges Buch "More Coding in Delphi", Abschnitt über Factory Pattern. Versuche etwas zu lernen. Zerbrach meinen Code in kleine Einheiten. Ich benutze ReportMemoryLeaksOnShutDown := True; und der folgende Code erzeugt ein Speicherleck. Warum tritt es auf und wie behebe ich es?

%Vor%     
Edijs Kolesnikovičs 09.01.2016, 13:33
quelle

1 Antwort

9

Dies ist ein Compilerfehler. Das Definieren einer anonymen Methode im Initialisierungsabschnitt der Einheit führt offenbar dazu, dass diese anonyme Methode nicht finalisiert und daher durchgelassen wird. In diesem Fall würde ich das Problem umgehen, indem ich den Code aus dem Initialisierungsabschnitt in class constructor verschiebe.

Entfernen Sie also den Abschnitt initialization vollständig und ändern Sie den Klassenkonstruktor wie folgt:

%Vor%

Hier ist die einfachste Reproduktion, die ich zusammenstellen kann:

%Vor%

Wenn Sie diese Einheit in ein Projekt einschließen, wird die anonyme Methode als durchgesickert gemeldet.

Aber diese Variante meldet kein Leck:

%Vor%

Der Fehler wurde in XE8 behoben.

    
David Heffernan 09.01.2016, 14:47
quelle