![]() |
Delphi-Version: 2005
Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
Hallo zusammen,
in der ![]()
Delphi-Quellcode:
Ich bin der Meinung, ein
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;
Delphi-Quellcode:
bzw.
reg.Free
Delphi-Quellcode:
ist erforderlich, um MemoryLeaks zu vermeiden. Im 2. Code-Abschnitt darüber ist es jedoch genauso programmiert wie im hier eingefügten.
FreeAndNil(reg)
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. |
AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
Ich würde das auch in eine try...finally packen
|
AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
Hallo,
Zitat:
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 |
AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
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:
das CloseKey sparen, da es in Free mit enthalten ist.
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; (vielleicht haben die in der Eile einfach nur das Falsche weggelassen :stupid: ) PS: Ein Schreibzugriff auch HKEY_LOCAL_MACHINE als Beispiel? Ein normaler Benutzer hat da doch keine Rechte mehr dafür, seit Vista/Seven. :shock: |
AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
Zitat:
|
AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
Zitat:
|
AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
Ich nicht. ;)
|
AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
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.
|
AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
Zitat:
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 ;-)) |
AW: Ist TRegistry.Free nach TRegistry.Create nicht notwendig?
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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