![]() |
Lebensdauer einer Stringlist
Beim Programmstart erzeuge ich im Formcreate des Hauptformulars eine lokale Stringlist, die ich einer Reihe von Dropdown-Boxen als Itemliste zuordne.
Die lokale Variable vom Typ TStringlist verschwindet natürlich beim Beenden von Formcreate. Auf diese Art produziere ich allerdings vermutlich ein Speicherleck, das sich natürlich erst beim Beenden des Programms manifestiert - bis dahin wird die Stringlist von den Dropdown-Boxen ja gebraucht - und daher nichts wirklich Böses anrichten kann. Würdet ihr die Variable extra in den private-Bereich der Form übersiedeln, um beim Programm Beenden die Stringlist wieder freizugeben? Wäre das für irgend etwas gut? |
AW: Lebensdauer einer Stringlist
Keine deiner ComboBoxen braucht die nachher noch.
Du kannst die StringList beruhigt direkt in der Methode wieder freigeben. |
AW: Lebensdauer einer Stringlist
Speicherlecks findet man zuverlässig mit Bordmitteln und/oder FastMM, zu dessen Verwendung ich dringend rate.
|
AW: Lebensdauer einer Stringlist
Zitat:
|
AW: Lebensdauer einer Stringlist
Ah, danke. Das war mir nicht klar.
Ich war der Meinung, die verschiedenen Comboboxen verweisen dann nur auf die eine Stringlist. Dann ist es einfach. Verstehe ich allerdings nicht ganz, weil die Zuweisung eines TObject doch normalerweise keine Kopie anlegt, dazu ist doch "assign" notwendig (das ich nicht verwendet habe, weil ich mir gedacht habe, einmal reicht, der Inhalt wird im ganzen Programmlauf nicht mehr geändert). Warum ist das in dem Fall anders? |
AW: Lebensdauer einer Stringlist
Das siehst du, wenn du dir den Setter von
Delphi-Quellcode:
anschaust.
TComboBox.Items
Was finden wir da? Ein
Delphi-Quellcode:
;)
Assign
Und die Items sind sowieso keine
Delphi-Quellcode:
, somit würde eine reine Zuweisung nicht funktionieren.
TStringList
|
AW: Lebensdauer einer Stringlist
Zitat:
Der Nachteil von OOP ist wohl, dass man sich auf nichts wirklich verlassen kann. Zitat:
|
AW: Lebensdauer einer Stringlist
Zitat:
|
AW: Lebensdauer einer Stringlist
Hallo,
es gibt in Delphi abstrakte Methoden (eine Methode die deklariert aber nicht implementiert ist). Daneben kann ich eine Methode als virtuell deklarieren (bzw. als dynamic, meint grundsätzlich das gleiche). Damit erreicht man dann polymorphes Verhalten, man deklariert in der Oberklasse eine virtuelle Methode (kann ggf. auch abstrakt sein), und in den verschiedenen Unterklassen überschreibt man dann die virtuelle Methode. Nun wird erst zur Laufzeit entschieden, wessen Methode tatsächlich ausgeführt wird (spätes Binden). Eine Klasse die mindestens eine abstrakte Methode enthält, bezeichnet man dann gemeinhin als abstrakte Klasse. In Delphi kann man (anders als beispielsweise in Java), auch Instanzen von abstrakten Klassen erzeugen. Ruft man nun aber zur Laufzeit eine abstrakte Methode auf, erhält man eine entsprechende Fehlermeldung. Ich wollte nur mal ein wenig klug sch.. Damit die Begrifflichkeiten, nicht ganz so durcheinander gewürfelt werden.:stupid: mfg frank |
AW: Lebensdauer einer Stringlist
Zitat:
Delphi-Quellcode:
var
MyStrings: TStringlist; begin MyStrings := TStringlist.Create; try MyStrings.Add('Eins'); MyStrings.Add('Zwei'); MyStrings.Add('Drei'); SomeComboBox.Items.Assign(MyStrings); finally MyStrings.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz