Also bei einem Fehler eine Aktion ausführen?
OK, es funktioniert Beides, aber
IMHO ist es mit'm Finally etwas schneller missverständlicher.
Delphi-Quellcode:
LFoo := TFoo.Create;
try
...
LFoo := nil; // Womöglich auch noch tief in irgendwelchen IFs versteckt auf nil setzen.
...
finally
LFoo.Free; // IMMER freigeben, außer irgendwo anders wurde vorher die Variable heimlich auf nil gesetzt.
end;
Delphi-Quellcode:
Result := TFoo.Create;
try
...
except
Result.Free; // NUR freigeben, wenn es geknallt hat.
raise;
end;
Ich weiß, im Falle von Free muß nicht geprüft werden, da es das selber macht, aber irgenwie sollte man hier schon, beim Free, einen Hinweis geben ... sei es in Form eines Codes oder als Kommentar, daß sich oben irgendwo noch ein :=nil versteckt.
Delphi-Quellcode:
LFoo := TFoo.Create;
try
...
LFoo := nil;
...
finally
if Assigned(LFoo) then
LFoo.Free;
end;