AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zur Reg-Unit

Ein Thema von Stefan Hueg · begonnen am 10. Nov 2004 · letzter Beitrag vom 12. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#1

Frage zur Reg-Unit

  Alt 10. Nov 2004, 22:25
Ich habe eine kurze Frage.

Nachdem ich die Reg-Unit deklariert und eine Instanz davon initialisiert habe (reg:=TRegistry.Create), und dann OpenKey aufgerufen habe, deinitialisiere ich das ganze dann mit FreeAndNil.

Muss ich VOR FreeAndNil reg.CloseKey ausführen oder is das egal?
Stefan Hueg
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Frage zur Reg-Unit

  Alt 10. Nov 2004, 22:32
Moin Stefan,

kurze Frage
Zitat von Stefan Hueg:
Muss ich VOR FreeAndNil reg.CloseKey ausführen
kurze Antwort:
Ja.

Längere Erklärung:
Durch das FreeAndNil werden nur die (Speicher)Resourcen freigegeben, die das Objekt belegt, durch das CloseKey auch das Handle, das durch OpenKey belegt wird.

Grundsätzlich:
Jede Resource, die Du anforderst/belegst, musst Du auch wieder freigeben.
BTW: try/finally (Resourcenschutzblock) nicht vergessen, soweit das Belegen und Freigeben innerhalb einer Prozedur/Funktion/Methode erfolgt.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Frage zur Reg-Unit

  Alt 10. Nov 2004, 22:41
Kann das FreeAndNil auch eine Exception produzieren, also muss ich das mit try\except kapseln?
Stefan Hueg
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Frage zur Reg-Unit

  Alt 10. Nov 2004, 22:46
Moin Stefan,

Zitat von Stefan Hueg:
Kann das FreeAndNil auch eine Exception produzieren,
kann es, wenn die übergebene Variable nicht auf ein gültiges Objekt zeigt.

Zitat von Stefan Hueg:
also muss ich das mit try\except kapseln
müssen nicht, hängt vom Zusammenhang ab.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#5

Re: Frage zur Reg-Unit

  Alt 11. Nov 2004, 06:17
Zitat von Stefan Hueg:
Muss ich VOR FreeAndNil reg.CloseKey ausführen oder is das egal?
Nein musst du nicht, egal was die anderen sagen.

Begründung. Auch FreeAndNil ruft den Destructor des Objektes auf. Im Destructor von TRegistry wird CloseKey automatisch aufgerufen.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Frage zur Reg-Unit

  Alt 11. Nov 2004, 06:22
Zitat von jim_raynor:
Begründung. Auch FreeAndNil ruft den Destructor des Objektes auf. Im Destructor von TRegistry wird CloseKey automatisch aufgerufen.
Kannst du diese Aussage mit Code belegen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Frage zur Reg-Unit

  Alt 11. Nov 2004, 06:26
Zitat von Luckie:
Zitat von jim_raynor:
Begründung. Auch FreeAndNil ruft den Destructor des Objektes auf. Im Destructor von TRegistry wird CloseKey automatisch aufgerufen.
Kannst du diese Aussage mit Code belegen?
Ich war mal so frei den Code aus der Registry.pas meiner Delphi 7 Professional zu kopieren:
Delphi-Quellcode:
destructor TRegistry.Destroy;
begin
  CloseKey;
  inherited;
end;
Also wird CloseKey wohl im Destruktor aufgerufen! (Was man nich alles so erfährt?! )

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#8

Re: Frage zur Reg-Unit

  Alt 11. Nov 2004, 06:30
Zur Zeit leider nicht, vielleicht denke ich heute Abend dran.

Auf jeden Fall ist ja bei den Prof und Enterprise Editions von Delphi der Quellcode der VCL dabei. Unter anderen auch die der Registry unit. Und da ist meines Wissens nach in TRegistry.Destroy der Aufruf von CloseKey drin. Mal ehrlich, wäre wirklich schlimm wenn nicht.

[edit]Gut, dann hat sich das ja jetzt erledigt [/edit]
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Frage zur Reg-Unit

  Alt 11. Nov 2004, 06:37
Zitat von mirage228:
Also wird CloseKey wohl im Destruktor aufgerufen! (Was man nich alles so erfährt?! )
Gut. Ich bin trotzdem der Meinung, dass man alles, was man selber aufmacht auch wieder selber zu machen sollte.
Delphi-Quellcode:
if OpenKey(...) then
begin
  ...;
  ...;
  CloseKey;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Frage zur Reg-Unit

  Alt 11. Nov 2004, 07:23
Zitat von Stefan Hueg:
Muss ich VOR FreeAndNil reg.CloseKey ausführen oder is das egal?
Jede vernünftig implementierte Komponente wird im Destruktor alle evtl. noch nötigen Speicher-/Resourcenfreigaben durchführen (Vor allem wenn sie ein Nachfahre von TComponent ist und in der IDE per Drag&Drop verwendet werden kann). Um sicher zu sein (vor allem wenn man den Sourcecode nicht hat) kann man auch noch Freigaben selbst anstoßen durch entsprechende Close, ...- Funktionen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:49 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