Thema: Delphi Stringlist und Objects

Einzelnen Beitrag anzeigen

Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#1

Stringlist und Objects

  Alt 30. Aug 2009, 09:15
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?
Bernhard
  Mit Zitat antworten Zitat