In diesem Topic geht es um das Freigeben von zur Laufzeit dynamisch erstellter Controls. Sind die Eltern (Parent/Owner) für ihre Kinder (Child/Controls) verantwortlich?
Wird zum Beispiel ein TButton zur Laufzeit erstellt, so wird ihm unter anderem ein
Owner zugewiesen.
Delphi-Quellcode:
MyButton := TButton.Create(self); // Owner zuweisen
MyButton.Parent := self; // Parent zuweisen
...
In einigen Tutorials wird gesagt, man solle zur Laufzeit erstellte Controls selbst wieder freigeben.
Beispiel:
Komponenten zur Laufzeit erstellen
Die OnlineHilfe sagt zum Thema Owner:
Zitat:
[Delphi] property Owner: TComponent read FOwner;
Beschreibung
Mit dieser Eigenschaft können Sie den Eigentümer einer Komponente ermitteln. Der Eigentümer ist für zwei Aufgaben zuständig:
Die untergeordnete Komponente wird bei der Freigabe des Eigentümers automatisch aus dem Speicher entfernt. Das bedeutet, dass alle Komponenten eines Formulars zusammen mit dem Formular freigegeben werden.
...
Standardmäßig ist ein Formular allen in ihm enthaltenen Komponenten übergeordnet. Dem Formular wiederum ist die Anwendung übergeordnet. Daher wird der Speicher für das Formular (und alle untergeordneten Komponenten) freigegeben, wenn die Anwendung geschlossen und deren Speicher freigegeben wird. Wird ein Formular in den Speicher geladen, lädt es alle in ihm enthaltenen Komponenten.
Der Eigentümer einer Komponente wird von dem Parameter bestimmt, der beim Erzeugen der Komponente an den Konstruktor übergeben wird. Bei Komponenten, die im Formular-Designer erzeugt werden, wird automatisch das Formular als Eigentümer (Owner) zugewiesen.
Ist das expliziete Freigeben von dynamisch erzeugten Controls notwendig oder nicht?
Anders gefragt: Werden dynamisch erzeugte Controls bei Programmende automatisch im Speicher freigegeben?
Guido.