Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?! (https://www.delphipraxis.net/209261-einer-proc-deklarierte-dynamische-arrays-muessen-vor-proc-ende-geloescht-werden.html)

r29d43 16. Nov 2021 13:53

In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?!
 
Hallo,

irgendwie hatte sich die Frage für mich bis dato noch gar nicht so richtig ergeben, weil ich dynamische Arrays bisher eigentlich immer gerne als Felder der Form selbst deklariert habe.

Nun aber habe ich mal ein paar größere davon in einer Procedure deklariert und bin jetzt irgendwie an der Frage hängengeblieben, ob der von ihnen belegte Speicherplatz am Ende der Proc nicht eigentlich auch freigegeben werden müsste. Weil ähnlich wie bei StringListen, die Größe des von ihnen benötigten Speicherplatzes vorab ungewiss ist und dieser deswegen auch auf dem Heap verortet sein muss.

Und weswegen solche dynamischen Arrays also tatsächlich vorm Proc-Ende auch per SetLength(blabla_dynArray,0) freigegeben werden müssen?

bzw.

Und weswegen solche dynamischen Arrays, wenn sie als Felder im privat/public-Deklarationsteil der Form deklariert sind, dann also auch in "FormDestroy" freizugeben sind?

Thx im Voraus
rXdY

Uwe Raabe 16. Nov 2021 14:01

AW: In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?
 
Dynamische Arrays sind ebenso wie Strings reference-counted. Sobald sie ihren Scope verlieren und keine andere Referenz mehr darauf existiert werden sie automatische freigegeben. Bei einer Methode, Procedure oder Function geschieht das beim Verlassen derselben. Bei Instanzen einer Klassen die Freigabe der Instanz.

Incocnito 16. Nov 2021 15:49

AW: In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?
 
Aber nicht vergessen den Inhalt des Array ggf. freizugeben ;-) just saying

Uwe Raabe 16. Nov 2021 16:16

AW: In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?
 
Zitat:

Zitat von Incocnito (Beitrag 1497676)
Aber nicht vergessen den Inhalt des Array ggf. freizugeben

Du meinst Objektinstanzen? Denn für Interfaces, Strings oder dynamische Arrays wird das auch automatisch erledigt.

Incocnito 17. Nov 2021 07:14

AW: In einer Proc deklarierte dynamische Arrays müssen vor Proc-Ende gelöscht werden?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1497679)
Zitat:

Zitat von Incocnito (Beitrag 1497676)
Aber nicht vergessen den Inhalt des Array ggf. freizugeben

Du meinst Objektinstanzen? Denn für Interfaces, Strings oder dynamische Arrays wird das auch automatisch erledigt.

Exakt! Deswegen das "ggf." ;-) ... Obwohl ich zugeben muss, dass ich mich mit dieser Interface-Geschichte und dem automatischen Freigeben dort echt schwer tue. Aber das ist eine andere Geschichte. 😅


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz