Finally unterdrückt keine Exceptions,
denn am Ende des Finally-Blocks wir die
Exception automatisch wieder ausgelöst.
(es sei denn es tritt in Finally eine Anderere/Neue
Exception auf, dann wird diese weitergereicht)
Zitat:
Delphi-Quellcode:
procedure xyz;
begin
A := TA.Create;
B := TB.Create;
try
...
finally
A.Free;
B.Free;
end;
end;
Ist unsicher, wie richtig gesagt wurde, denn A wird nicht freigegeben, wenn es in TB.Create knallt.
Delphi-Quellcode:
procedure xyz;
begin
A := TA.Create;
B := TB.Create;
...
FinallyExit:
A.Free;
B.Free;
end;
Ist nicht viel besser, denn A und B wurden nicht initialisiert und wenn es in einem der Konstruktoren knallt. dann nallt es auch bei den uninitialisierten Free's.
Außerdem übersieht man das FinallyExit schnell mal ... so erkennt man nicht, daß es da einen Schutzblock gibt und man sieht nicht wo der Block aufhört.
Delphi-Quellcode:
procedure xyz;
begin
A := TA.Create;
try
B := TB.Create;
try
...
finally
B.Free;
end;
finally
A.Free;
end;
end;
// oder
procedure xyz;
begin
A := nil;
B := nil;
try
A := TA.Create;
B := TB.Create;
...
finally
A.Free;
B.Free;
end;
end;
// oder
procedure xyz;
begin
B := nil;
A := TA.Create;
try
B := TB.reate;
...
finally
A.Free;
B.Free;
end;
end;
so sieht es schon besser aus