Zitat von
Christian Seehase:
@littleDave:
Wenn man nil zuweist, wird intern, im Prinzip, ein FreeAndNil durchgeführt, also nur wenig mehr als .Free.
Beides gilt für D7 und D2006, wird also in D2005 auch so sein.
Das stimmt - intern wird auch nur .Free aufgerufen. Aber wenn man explizit
:= nil aufruft, weiß die Komponente, dass die Property
.Picture gelöscht/resettet werden soll. Wenn man hingegen im Quelltext selber
.Picture.Free aufruft, bekommt das die TImage-Komponente afaik nicht mit (vielleicht doch durch ein OnDestryEvent, weiß ich gerade nicht).
Beim direkten aufruf von .Free zeigt der Klassenpointer immer noch auf den alten Speicherbereich, was eigentlich zu einer Zugriffsverletzung führen sollte
. Ich würd die
:= nil-Variante vorziehen, da dann der Rest von der TImage-Komponente erledigt wird (bzw. werden sollte).