Einzelnen Beitrag anzeigen

Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#14

AW: JSON-Serialisierung von generischen Listen nur mit MemoryLeaks (FastMM4)

  Alt 19. Nov 2014, 13:18
also nun nochmal komplett.

im Anhang eine Version ohne Speicherleck.
Zum einen ist zu beachten, dass eine Objectlist keine TCollection ist, also die Elemente der Liste müssen manuell selbst im Destructor gelöscht werden.
Delphi hat aber ein Bug in "DeleteRange" in TList<> und TObjectList<>, welcher den Abstrakten Fehler erzeugt.
Umgehen kann man ihn, indem man jedes Element einzeln im Destructor löscht. (absteigend durchgehen)
Erzeugung über JSON jetzt besser über eine class function.

Im Anhang ein funktionierendes Projekt (ohne Speicherlecks)

Delphi-Quellcode:
destructor TObjectsTEntry.destroy;
var i : Integer;
    entry : TEntry;
begin
  for i := self.Count-1 downto 0 do begin
    entry := self.Items[i];
    entry.Free;
    self.Delete(i);
  end;
  self.Clear;
  inherited;
end;

Delphi-Quellcode:
class function TEntryList.Create(aJSON: string) : TEntryList;
begin
  result := TJson.JsonToObject<TEntryList>(aJSON);
end;
Angehängte Dateien
Dateityp: rar SimpleJSONLeak.rar (6,0 KB, 11x aufgerufen)
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat