![]() |
Speicherleck nach Löschen des Parent???
Halli Hallo,
ich hätte da mal eine Frage: Ich erzeuge dynamisch TabSheets in einem TPageControl und packe auf die Sheets dann auch Elemente drauf (Memo, Label, etc.) deren Parent natürlich das jeweilige TabSheetX ist. Muss ich, wenn die diese TabSheets nicht mehr benötige, alle einzelnen Elemente auf dem Sheet löschen oder reicht es mit TabSheet1.Destroy das Parent-Sheet platt zu machen??? Entsteht da irgendwelcher Datenmüll im Speicher? Danke für Eure Einschätzung. Gruß Peter |
AW: Speicherleck nach Löschen des Parent???
Schau mal bitte hier:
![]() Eine englischsprachige Beschreibung zum Thema. |
AW: Speicherleck nach Löschen des Parent???
Da es in dem Artikel ja eher um Forms geht, hoffe ich, dass ich trotzdem das Wichtigste rausgelesen habe!?!?
"....the form is destroyed automatically when its owner is destroyed" D.h. dann wohl, dass ich keinen Speichermüll erzeuge - richtig? Sorry, bin ein eher simples Gemüt (oder nennen wir es "erfahrener Laie") :oops: Danke Dir Gruß Peter |
AW: Speicherleck nach Löschen des Parent???
Richtig- Wenn das Formular zerstört wird, zerstört es auch alle Dinge die ihm "gehören". Darunter auch dein TabSheet.
Ich würde dem TabSheet als Owner das PageControl geben, aber im Endeffekt macht das wohl keinen Unterschied. Wenn du dich so um Speicherlecks sorgst, setze doch mal die Variable ![]()
Delphi-Quellcode:
und schau selbst ;-)
True
|
AW: Speicherleck nach Löschen des Parent???
Im Artikel steht:
Zitat:
Eigentlich gilt es für alles, was von TComponent abgeleitet wird. Flappsig fomuliert: Alles, was man irgendwie auf ein Formular pappen kann. Oder als einfacher Merker: Sieht der Konstruktor so aus
Delphi-Quellcode:
wird das Teil zusammen mit dem angegebenen Owner weggeräumt, sobald der weggeräumt wird.
constructor Create(AOwner: TComponent); override;
|
AW: Speicherleck nach Löschen des Parent???
Danke Euch!!!
:thumb: :thumb: :thumb: |
AW: Speicherleck nach Löschen des Parent???
Zitat:
|
AW: Speicherleck nach Löschen des Parent???
Dass Parent und Owner nicht das gleiche ist habe ich verstanden.
Aber was macht das in diesem konkreten Fall für einen Unterschied? Er hat sein PageControl und fügt zur Laufzeit weitere Tabsheets hinzu. Mehr nicht. Ohne weitere Angaben: Die Tabsheets werden zerstört wenn das Pagecontrol zerstört wird. Das Pagecontrol wird zerstört wenn sein Parent (Formular/Frame) zerstört wird. Also praktisch kein Unterschied. |
AW: Speicherleck nach Löschen des Parent???
Wer aber ein Tabsheet als Parent hat und nicht als Owner, wird beim zerstören des Tabsheets bzw. des PageControls, nicht zerstört.
Wenn ich das hier richtig sehe, müssten die Frames sowohl als Parent, als auch als Owner, das entsprechende Tabsheet bekommen. Wird das Tabsheet nicht zum Owner, bleibt das Frame beim entfernen des Tabsheet als Speicherloch erhalten ;-) |
AW: Speicherleck nach Löschen des Parent???
Auch der Parent gibt seine untergeordneten Controls frei. Ich weiß nicht, ob das schon immer so war, aber zumindest unter Delphi 7 findet sich in der Controls.pas im Destruktor von TWinControl:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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-2025 by Thomas Breitkreuz