Autor Beitrag
Frankieboy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: So 02.08.09 10:22 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
type
  TGroessen = record
    Groesse: Int64;
    Dateien: TStrings;

var
  Liste2: Array of TGroessen;


Hallo,

ich habe ein dynamisches Array wie oben. Wenn ich jetzt eine Länge von ca. 500 des Arrays habe, mit 500 initialisierten TSTrings (Varibale Dateien) und ein String oder mehr pro Dateien, reicht es dann, mit setlength(Liste2,0) das Array zu löschen, oder sollte ich vorher jede einzelne Stringlist mit Dateien.Free freigeben?

Danke für die Hilfe,

Frank
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 02.08.09 10:25 
Da musst du alles manuell freigeben.

Alternativ nimm einfach für die Dateiliste statt einem dynamischen Array eine TObjectList mit OwnsObjects auf True, dann musst du dich nicht darum kümmern, egal ob die Liste freigegeben wird oder einzelne Einträge gelöscht werden. :idea:
Und statt einem Record eine Klasse, mit Konstruktor und Destruktur. Dann musst du dich da nicht um alles einzeln kümmern.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: So 02.08.09 14:41 
Man sollte generell nicht mit TStrings arbeiten, da diese nur abstrakte Methoden enthält, sondern mit TStringList.

_________________
PROGRAMMER: A device for converting coffee into software.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 02.08.09 15:52 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Man sollte generell nicht mit TStrings arbeiten, da diese nur abstrakte Methoden enthält, sondern mit TStringList.
Es ging bei der Aussage vermutlich um die Variablendeklaration, denn sonst würde es ja auch gar nicht funktionieren. Und diese sollten in der Tat als TStrings deklariert werden und nur eine TStringList hineingelegt werden.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: So 02.08.09 15:59 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Und diese sollten in der Tat als TStrings deklariert werden und nur eine TStringList hineingelegt werden.

Hm? Warum das?
Ich hab zwar schon gesehen, dass in Funktionen die Parameter vom Typ TStrings sind, aber die ganze Variable von diesem Typ..?

_________________
PROGRAMMER: A device for converting coffee into software.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 02.08.09 16:05 
Weil man dann auch andere TStrings reinpacken kann, je nach Wunsch. Denn diese Deklarationen sind ja nur die Basis, und später soll es ja vielleicht eine THashedStringList oder MemoX.Lines oder ähnliches sein (was da zugewiesen wird). Wenn man so etwas jetzt als TStringList deklariert, müsste man hinterher den kompletten Quelltext (von ggf. anderen Teammitgliedern) ändern...

Deshalb sollte man direkt immer TStrings als Variablen-/Feld-/Propertytyp benutzen und beim Erzeugen der Objekte den speziellen Typ benutzen.