Zitat von
sniper_w:
Auf jedem Fall sollte man im Kopf haben, dass nach Obj.Free; immer Obj := nil; kommt oder einfacher FreeAndNil(Obj);.
Bei lokalen Variablen ist das völlig unnütz und verlangsamt, wenn auch nur sehr gering, die Ausführgeschwindigkeit. Warum sollte man eine Variable, die von anderen Daten auf dem Stack nach dem Verlassen der Funktion überschieben wird, noch auf nil setzen? Auf diese lokale Variable kann ja sowieso nicht mehr zugegriffen werden, da der Compiler einen Syntaxfehler ausgibt, wenn man in Funktion A auf die lokalen Variablen der Funktion B zugreifen will.
Und wer meint, der müsse mittels ESP auf diese bereits als ungültig deklarierten Daten zugreifen, der wird sich sicherlich mehr Gedanken machen, wie er mit lokalen Variablen umzugehen hat.
Ich persönlilch nutze FreeAndNil nur dann, wenn nicht vorhersagbar ist, dass irgendetwas noch darauf zugreifen könnte. So ist es bei Controls im Desktruktor oft nötig FreeAndNil zu benutzen und in den Methoden Resize, Paint, ... eine Abfrage einzubauen. Aber bei plain Objekten mache ich das nur in ganz seltenen Fällen.