Re: Richtig/sauber freigeben - nur wie?
Zitat:
|
Re: Richtig/sauber freigeben - nur wie?
Zitat:
Nix, außer dass du dich bei Variablen, welche nicht Objekte oder Pointer sind, auch niemals um die Freigabe kümmern musst. Da dies für dein Record zutrifft, brauchst du auch nichts löschen. Das wird automatisch erledigt. |
Re: Richtig/sauber freigeben - nur wie?
Zitat:
Daß es nun darauf ankommt, ob es für diese Daten eine entsprechende Automatik gibt. Strings und dynamische Arrays werden von der CompilerMagic behandelt. bei Interfaces ist es ähnlich Auch wenn du Records via New/Dispose erstellst/löschst oder selber Speicher z.B. via GetMem/FreeMem/Initialize/Finalize verwaltets greift die CompilerMagic ein. Diese CompilerMagic behandelt auch alle Variablen, welche in Funktions-Parametern, als lokale/globale Variablen, in Arrays oder als Class-/Instanzvariablen in Objekten drin stecken Dann gibt es eben noch Objekte, welche beim Dispose/Free eine in ihnen angelegte Liste selber bereinigen. So, nun Interger, Sets, Enums, Chars ... liegen halt direkt im Record und da sie keinen eigenen Speicher besitzen werden sie praktisch mit dem Record entfernt/erstellt. Alles was jetzt außerhalb des Records liegt und im Record nur einen Zeiger hat muß nun irgendwie extra behandelt (gelöscht) werden. Da nun das Array ja von der CompilerMagic freigegeben wird, kümmert sich diese auch im die enthaltenen Records und gibt auch dort "alles" frei, welches ebenso von ihr behandelt wird. - Integer/Enum/Set/ShortString ligt mit drin und braucht nicht extra behandelt zu werden - bei den String, DynArray und Interface macht dieses halt die CompilerMagic, wenn der Record-Speicher Ordnunggemäß freigegeben wird (man kann es aber auch selber machen) - bei Objekten mußt du es mit .Free selber machen (es sei den, das Objekt liegt in einem anderen Objekt, welches seine Liste selber bereinigt) - bei allen anderen Pointern mußt du es eh selber machen |
Re: Richtig/sauber freigeben - nur wie?
Alles klar, ich denke, jetzt hab ichs soweit verstanden ;)
Und was ist mit Pointern wie zB von ScanLine welche kommen? das sind doch eigentlich nur integerwerte, die auf einen Speicherbereich (zB Bitmap) zeigen, der separat freigegeben wird (hier mit dem Objekt vom Typ TBitmap), oder? |
Re: Richtig/sauber freigeben - nur wie?
bei ScanLine holst du dir sozusagen nur eine Kopie eines Zeigers auf den Speicher ... der verwiesene Speicher wird aber vom TBitmap verwaltet und auch freigegeben.
|
Re: Richtig/sauber freigeben - nur wie?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:46 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