![]() |
:= NIL ist gleich release?
Hallo!
Ich lese öffter, das es in delphi möglich ist einfach einen Speicher wieder frei zu geben, indem man dem Zeiger auf NIL setzt. Die C-Jungs müssen scheinbar noch manuell den release aufrufen?! Ich rede nicht von .Net wo die Speicher-Abfallbeseitigung das erledigt :lol: Habe ich da etwas verpasst? Oder wie funktioniert das? Frank :coder: |
Re: := NIL ist gleich free?
Also ich war der Meinung das wenn man was = nil setzt, das dann die Variable zwar auf nil zeigt, das eigentliche Objekt doer was auch immer immernoch im Speicher existiert.. :gruebel:
|
Re: := NIL ist gleich free?
Zitat:
|
Re: := NIL ist gleich free?
Das Setzten auf Nil verschlimmbessert die Sache, weil nun die automatische Freigabe durch den Destruktor des Owner auch nicht mehr funktioniert, weil dieser meinet das Objekt sei schon zerstört, da Referenz NIL ist.
|
Re: := NIL ist gleich free?
Zitat:
|
Re: := NIL ist gleich free?
Zitat:
wenn das betreffende Objekt ein Interface implementiert (also z.B. eine Instanz eines COM-Servers ist) dann macht Delphi eine Referenzzählung. Das heisst, daß das Objekt freigegeben wird wenn die letzte Referenz auf NIL gesetzt wird, also von der Wirkung her wie bei dot-net-Objekten. Bei "normalen" Objekten trifft das nicht zu. Diese müssen explizit freigegeben werden. Ciao, Ralf |
Re: := NIL ist gleich free?
Zitat:
Wie funktioniert das? Wer zählt den da mit, wenn ein Pointer auf NIL gesetzt wird? Frank PS. Habe den Titel geändert! |
Re: := NIL ist gleich free?
Zitat:
|
Re: := NIL ist gleich free?
Hallo,
Zitat:
Nochmal zum Verständnis: Jedesmal, wenn eine neue Referenz auf ein Interface erzeugt wird, sorgt Delphi dafür, dass die Methode _AddRef des Interface aufgerufen wird. Beim Entfernen der Referenz (auf nil setzen, Scope verlassen) wird automatisch _Release aufgerufen. Deshalb sind z. B. Funktionen mit einem try..Finally umgeben. Im Finally wird _Release für alle lokalen Referenzen aufgerufen. Da das alles die Compiler-Magic macht, bekommt der Programmierer davon normalerweise nichts mit. Gruß xaromz |
Re: := NIL ist gleich release?
Anmerkung string- und "array of"-Variablen werden genauso behandelt. Der einzige Unterschied ist das nicht die COM-Objekt-Referenzzaehlung sondern die Delphi-eigene Referenzzaehlung fuer diese Typen zum Zuge kommt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 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