![]() |
Frage eines Neulings bezüglich 'Free'
Ich bin noch recht neu bei Delphi. Ich weiss dass es Constructors gibt, kenne ich von C++ her.
Aber nun stoße ich häufiger auf diese Anweisungen:
Code:
Es scheint mir so, als wäre dies der Destruktor. Ich hoffe ich bin da richtig.
StringList.Free;
Allerdings würde ich gerne wissen wo der Unterschied zu folgendem liegt:
Code:
Bräuchte da mal ein bisserl Nachhilfe ;)
FreeAndnil(StringList);
Danke im Vorraus |
Re: Frage eines Neulings bezüglich 'Free'
Hi,
du hast doch eine Delphi-Hilfe. Dort kannst du ja mal nach schauen: Zitat:
Zitat:
Zitat:
|
Re: Frage eines Neulings bezüglich 'Free'
Ist ganz einfach.
"Free" ruft wenn die Instanz noch vorhanden ist "Destroy" (den eigentlichen Destructor) auf. Dabei ist "Destroy" sowie "Free" eine Methode von dem Object. "FreeAndnil" hingegen ist keine Methode von dem Object sondern eine eigenständige procedure/function welche vermutlich nix anderes macht als "Free" des Objectes auzurufen und danach den Pointer auf "nil" zu setzen |
Re: Frage eines Neulings bezüglich 'Free'
ja. und zum zerstören zu empfehlen ist wie gesagt "FreeAndNil()", welches, wenn möglich, den Destruktor "Destroy" aufruft, und danach die Veriable auf nil setzt, damit sie nicht mehr dereferenziert werden kann.
|
Re: Frage eines Neulings bezüglich 'Free'
Oki vielen Dank an euch :) Also immer brav FreeAndNil aufrufen ^^
|
Re: Frage eines Neulings bezüglich 'Free'
im normalfall schon. aber nur, wenn man das objekt nicht mehr braucht
|
Re: Frage eines Neulings bezüglich 'Free'
Zitat:
Wenn Du zum Beispiel ein Objekt nur innerhalb einer Funktion benutzt, und es am Ende wieder freigibst, dann reicht vollkommen, auf dem Objekt das Free auszuführen, da das Setzen des Wertes auf Nil tatsächlich noch Taktzyklen braucht, die Variable nach dem Verlassen der Methode aber eh ungültig wird: demnach ein Performanceverlust. Das ist zwar bei einem FreeAndNil() nicht wirklich merkbar, aber wenn das in jeder Methode gemacht wird, und solche Methoden gar noch in einer lang laufenden Schleife aufgerufen werden, dann summiert sich das unter Umständen schonmal merkbar hoch. |
Re: Frage eines Neulings bezüglich 'Free'
:mrgreen: ach, halt's maul :mrgreen:
^^^^ beachten sie die IRONIE. aber für otto-normalprogger machts keinen unterschied... |
Re: Frage eines Neulings bezüglich 'Free'
Zitat:
![]()
Delphi-Quellcode:
Warum gehen die davon aus, dass alle nicht initialisierten Objekte nil sind? :gruebel:
procedure TForm1.Button1Click(Sender: TObject);
var FS: TStream; begin FS.Free; end; Edit: FS hat hier lustigerweise die gleiche Adresse wie Form1 *g* |
Re: Frage eines Neulings bezüglich 'Free'
FS wird nicht nil sein, aber es wird auch nichts gescheites drinne stehen. Lokale Variablen werden nicht initialisiert, ergo steht in SF irgend ein Schrott drinne und die Prüfung auf <> nil oder muit
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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