Wenn der Constructor fehlschlägt (
Exception), dann wird die Klasse gleich wieder freigegeben (Destroy wird aufgerufen).
(Ob das soweit stimmt, würde einem der Debugger verraten)
Die Klasse entspricht also eher diesem: (man beachte das Reset)
Delphi-Quellcode:
procedure Test(const AFileName: string);
var
f: TextFile;
begin
AssignFile(f, AFileName);
try
Reset(f);
//
finally
CloseFile(f);
end;
end;
Wie sieht denn die Fehlermeldung hier aus?
Und was passiert bei Folgendem?
Delphi-Quellcode:
destructor TTest.Destroy;
begin
if TFileRec(f).Mode <> fmClosed then
CloseFile(f);
inherited;
end;
// oder
destructor TTest.Destroy;
begin
//if TFileRec(f).Mode in [fmInput, fmOutput, fmInOut] then
if TFileRec(f).Mode = fmInput then
CloseFile(f);
inherited;
end;