AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
Thema durchsuchen
Ansicht
Themen-Optionen

Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

Ein Thema von Matze · begonnen am 7. Jul 2010 · letzter Beitrag vom 7. Jul 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

  Alt 7. Jul 2010, 06:52
Delphi-Version: 2005
Hallo zusammen,

in der Online-Hilfe zu "TRegistry.OpenKey" steht u.a. folgender Code:
Delphi-Quellcode:
procedure TForm3.DeleteFromRegBtnClick(Sender: TObject);
var
  reg : TRegistry;
begin
  reg := TRegistry.Create(KEY_WRITE);
  reg.RootKey := HKEY_LOCAL_MACHINE;

  reg.DeleteKey('Software\\MyCompanyName\\MyApplication');
  reg.DeleteKey('Software\\MyCompanyName');

  reg.CloseKey();
end;
Ich bin der Meinung, ein reg.Free bzw. FreeAndNil(reg) ist erforderlich, um MemoryLeaks zu vermeiden. Im 2. Code-Abschnitt darüber ist es jedoch genauso programmiert wie im hier eingefügten.
Sowas ist mir dort schon mehrfach aufgefallen.

Ist die Online-Hilfe von Embarcadero so schlecht?

Jeder Programmieranfänger oder auch Fortgeschrittene, wird diese Hilfe nutzen und sich an den Beispielen orientieren. Und da man sich i.d.R. auf die Hilfe verlässt, merkt man sich das Vorgehen und macht es zukünftig falsch.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

  Alt 7. Jul 2010, 07:16
Ich würde das auch in eine try...finally packen
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

  Alt 7. Jul 2010, 07:30
Hallo,

Zitat:
Ist die Online-Hilfe von Embarcadero so schlecht
Fehler machen alle.

Aber stimmt schon,
gerade mit D2009/D2010 sollten die mal ihre Beispiele mit FastMM4-FullDebug prüfen.

Vielleicht hat das ja jemand des C++-Teams 1 zu 1 nach Delphi übersetzt (in C+ gibt es Auto-Pointer, die aber hier auch nicht verwendet worden sind)

Und ja, es fehlt das reg.Free;

Delphi-Quellcode:
reg:= TRegistry.Create;
try
finally
  reg.Free;
end;

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

  Alt 7. Jul 2010, 08:11
CloseKey schließt nur den Schlüssel
und TRegistry.Free ist natürlich dennoch für's Freigeben des Objekts nötig.

Allerdings könnte man sich hier
Delphi-Quellcode:
var
  reg : TRegistry;
begin
  reg := TRegistry.Create(KEY_WRITE);
  reg.RootKey := HKEY_LOCAL_MACHINE;

  reg.DeleteKey('Software\\MyCompanyName\\MyApplication');
  reg.DeleteKey('Software\\MyCompanyName');

  reg.CloseKey;
  red.Free;
end;
das CloseKey sparen, da es in Free mit enthalten ist.
(vielleicht haben die in der Eile einfach nur das Falsche weggelassen )


PS: Ein Schreibzugriff auch HKEY_LOCAL_MACHINE als Beispiel?
Ein normaler Benutzer hat da doch keine Rechte mehr dafür, seit Vista/Seven.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

  Alt 7. Jul 2010, 09:25
Ein normaler Benutzer hat da doch keine Rechte mehr dafür, seit Vista/Seven.
Seit NT, 2000, XP!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

  Alt 7. Jul 2010, 09:27
Seit NT, 2000, XP!
Schon klar, aber vor Vista waren doch alle Admins.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

  Alt 7. Jul 2010, 09:37
Ich nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#8

AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

  Alt 7. Jul 2010, 11:24
Die Beispiele in der Online-Hilfe sind schon immer teilweise sehr unelegant/fehlerbehaftet gewesen (Objekte nicht freigegeben, unübersichtliche Verwendung von with, Vergleiche auf true, etc.). Man kann sie nur als Anschauungsbeispiel für die Verwendung der speziellen Routine verwenden (wozu sie ja auch gedacht sind), sollte sie aber nicht unbedingt als das NonPlusUltra der Programmierkunst verstehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

  Alt 7. Jul 2010, 12:05
Allerdings könnte man sich hier
...
das CloseKey sparen, da es in Free mit enthalten ist.
Aber Vorsicht.
Das geht nur, wenn man nur einen Key geöffnet hatte, denn es wird nur der jeweils letzte geöffnete bei Free geschlossen.
Zu jedem Open also am Besten auch ein Close (wie sich das gehört )
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 Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?

  Alt 7. Jul 2010, 12:43
Ich würde das auch in eine try...finally packen
Stimmt! Das ist mir noch gar nicht aufgefallen.

Dann könnte man "Free" im vorliegenden Beispiel weg lassen, auch wenn ich es anders schöner finde. Gerade bei einer Erweiterung des Codes muss "Free" ggf. ergänzt werden und sowas vergisst man dann leicht.
Meiner Meinung nach sollten die Beispiele jedoch allgemein gehalten werden. Normalerweise guckt man kurz nach, wie es geht und überträgt es auf seine Aufgabenstellungen.

Naja gut, dann werde ich nur noch auf die OH verweisen, wenn ich die Beispiel-Codes davor angesehen habe.
  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 08:53 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