Hallo zusammen,
ich benötige recht häufig Stringlisten.
An den Stringlisteneinträgen hängen noch weitere Daten dran.
Das mache ich wie folgt (in Anlehnung an einen anderen Beitrag aus der
DP):
Delphi-Quellcode:
type
TDat = class(TObject)
s: string;
...
destructor Destroy; override; // nur zum testen
end;
Delphi-Quellcode:
destructor TDat.Destroy;
begin
showmessage('TDat.Destroy');
inherited Destroy;
end;
Verwendet wird das so:
Delphi-Quellcode:
dat:= TDat.Create;
with d do begin
s:= 'Test';
...
end;
MeineStringListe.AddObject('Zeile', dat);
Das funktioniert soweit auch.
Das Problem aber ist nun folgendes:
Mit
MeineStringListe.Clear;
und
MeineStringListe.Free;
erzeugt man Speicherleichen.
-> Wie kann ich solche Speicherleichen auffinden:
Gerade in einem anderen Beitrag gefunden: mit -> TObjectList geht das wohl
werd ich gleich mal probieren!
Man könnte zwar vor Clear oder Free
with MeineStringListe do for i:=0 to Count-1 do Objects[i].Free;
aufrufen, finde ich aber umständlich.
-> Gibt es eine elegantere Möglichkeit?
Eleganter wäre wohl:
Delphi-Quellcode:
type
TObjStringList = class(TStringList)
procedure Delete(Index: Integer); override;
end;
procedure TObjStringList.Delete(Index: Integer);
begin
Showmessage('TObjStringList.Delete '+IntToStr(Index));
Objects[Index].Free;
inherited;
end;
Wenn man einzelnen Stringlisteneintrag löscht geht das zwar,
aber bei Clear und Free wird delete nie aufgerufen
(-> ich dachte zumindest clear ruft für alle delete auf)
muss man dann neben delete auch clear und/oder free überschreiben
oder besser:
gibt es was fertiges im Sinne von TObjStringList bei dem schon an alles gedacht wurde?