Autor |
Beitrag |
Frankieboy
      
Beiträge: 65
|
Verfasst: So 02.08.09 10:22
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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
Und statt einem Record eine Klasse, mit Konstruktor und Destruktur. Dann musst du dich da nicht um alles einzeln kümmern.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 02.08.09 15:52
Xentar hat folgendes geschrieben : | 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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 02.08.09 15:59
jaenicke hat folgendes geschrieben : | 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|
|