AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Abfragen ob eine Variable oder die Referenz noch existiert
Thema durchsuchen
Ansicht
Themen-Optionen

Abfragen ob eine Variable oder die Referenz noch existiert

Ein Thema von Cyberaxx · begonnen am 25. Sep 2007 · letzter Beitrag vom 26. Sep 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#11

Re: Abfragen ob eine Variable oder die Referenz noch existie

  Alt 25. Sep 2007, 23:47
Zitat von Muetze1:
Da hilft auch try/finally, weil trotz Exit würde der finally Block durchlaufen und somit wäre kein Leck entstanden.
Ja jetzt wo du es sagst stimmt es schon hab ich halt verpatzt, bzw nicht weiter drüber nach gedacht, da dieser Teil noch nicht wirklich implementiert ist.

Lotto wäre ne Idee

Was würde passieren wenn ich es vorher nochmal als eine Lokale Variable setze?

Delphi-Quellcode:
var
  AClient: TClient;
begin
  if FClients.FindSocket(Socket, Index) then
    AClient := FClients.Client[Index];

  FreeandNil(AClient);
end;
[Edit]Ok vergiss den Teil, dann gibt es eine Exception in der Collection nehme ich an...[/Edit]
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: Abfragen ob eine Variable oder die Referenz noch existie

  Alt 26. Sep 2007, 00:01
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.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Abfragen ob eine Variable oder die Referenz noch existie

  Alt 26. Sep 2007, 00:49
Ohne jetzt den ganzen Source gelesen zu haben, kann ich bei solchen Sachen einem nur das arbeiten mit Interfaces ans Herz legen...

Bye Christian
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#14

Re: Abfragen ob eine Variable oder die Referenz noch existie

  Alt 26. Sep 2007, 07:50
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.
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 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