Ja, ich hab mich nur kurz ausgedrückt. Eigentlich bin ich vollkommen deiner Meinung, ohne sl:= nil könnte free Daten zerstören. Free prüft soweit ich richtig bin, immer ob überhaupt eine Instanz des Objektes besteht, deshalb das sl:= nil vor dem create.
Ich selbst gehe fast immer so vor
Delphi-Quellcode:
foo := nil;
try
foo := TFoo.create;
//mach was
finally
foo.free;
end;
warum? In der Regel ist es so, dass mehrere Objekte erzeugt werden müssen, eine komplexe Verschachtelung von Try und Finally für jedes einzelne Objekt macht den Code dann extrem unübersichtlich. Deshalb erzeuge ich Objekte meist innerhalb des Try Blockes.
Bsp.:
Delphi-Quellcode:
foo := nil;
bar:= nil;
try
foo := TFoo.create;
bar:=TBar.create;
//mach was mit Foo und Bar
finally
bar.free
foo.free;
end;