![]() |
Re: Abfragen ob eine Variable oder die Referenz noch existie
Zitat:
Lotto wäre ne Idee :D Was würde passieren wenn ich es vorher nochmal als eine Lokale Variable setze?
Delphi-Quellcode:
[Edit]Ok vergiss den Teil, dann gibt es eine Exception in der Collection nehme ich an...[/Edit]
var
AClient: TClient; begin if FClients.FindSocket(Socket, Index) then AClient := FClients.Client[Index]; FreeandNil(AClient); end; |
Re: Abfragen ob eine Variable oder die Referenz noch existie
Es wäre komplett kein Unterschied. Delphi kennt keine auto-generated Copy Constructoren und somit hast du immer nur Zeiger auf die Objekte an sich. Somit ist es egal wie du den Aufruf des Destructors ausführst, es wird immer diese eine Instanz freigegeben. Die TCollection wie auch die lokale Variable oder AClient beinhalten immer nur die Adresse (sie ist intern ein Pointer) wo die Objektinstanz im Speicher liegt. Alle 3 zeigen auf einen Speicherbereich und wenn du diesen freigibst zeigen immernoch alle 3 Elemente auf diesen Speicherbereich (wo nichts mehr ist) und Zugriffe auf diese Elemente sind somit böse (eigentlich sollte man sofort was auf die Finger bekommen). Damit letzteres passiert, müssten die Adressen zurückgesetzt werden. Am besten eignet sich die Adresse 0 (nil), weil beim Zugriff auf solche Adressen werden vom Prozessor (durch die LDT/GDT) nicht erlaubt und er erzeugt eine entsprechende Ausnahme (endet bei uns in einer Exception) und wir bekommen eine entsprechende Meldung. Bei der ganzen Erklärung merkt man schon, dass es schwierig wird, alle Variablen welche auf ein und die gleiche Instanz zeigt, wieder ordentlich auf nil zu setzen, damit man mitbekommt ob die Instanz noch existiert. Zur Zeit hat noch ein anderer Threadersteller mit genau diesem Phänomen ein Problem.
Also: Welches Element du nun nimmst um es freizugeben: es ist immer nur eine Instanz da und die gibst du ja frei. |
Re: Abfragen ob eine Variable oder die Referenz noch existie
Ohne jetzt den ganzen Source gelesen zu haben, kann ich bei solchen Sachen einem nur das arbeiten mit Interfaces ans Herz legen...
Bye Christian |
Re: Abfragen ob eine Variable oder die Referenz noch existie
Hab nie wirklich etwas mit Interfaces gemacht und dein Satz gibt mir keinen wirklichen Ansatz warum ich dies tun sollte.
wäre nett wenn Du mit etwas mehr Informationen kommen würdest, warum ich Interfaces nutzen sollte. Das einzige was mit in dem Projekt Sorgen bereitete war die Funktion des getrennten Benutzers. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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