Solche komischen Sachen muss man nur dann machen, wenn man etwas falsch implementiert hat, bzw. in so einem Ausnahmefall trotzdem noch etwas macht, bzw. etwas nicht korrekt zurücksetzt.
Delphi-Quellcode:
procedure TForm1.DoLoadSomething( const AFilename : string );
begin
FSomething.Free;
FSomething := TSomething.CreateFromFile( AFilename ); // da kann es knallen
end;
hinterlässt im Fehlerfall einen
dangling Pointer.
Delphi-Quellcode:
procedure TForm1.DoLoadSomething( const AFilename : string );
var
newSomething: TSomething;
begin
newSomething := TSomething.CreateFromFile( AFilename ); // da kann es knallen
try
FSomething.Free; // da könnte es knallen
FSomething := newSomething;
except
newSomething.Free;
raise;
end;
end;
Die Kernfrage ist immer: Wie hinterlasse ich das System in einem Ausnahmefall. Und das will gut überlegt sein.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)