Ludo Brands schrieb:
As an example consider the following routine:
Procedure Doit (Name : string);
Var F : Text;
begin
Try
Assign (F,Name);
Rewrite (name);
... File handling ...
Finally
Close(F);
end;
That's a questionable example. Which of the actions are required for
proper operation of Close?
It's much clearer with objects:
MyObj := TMyClass.Create;
//only now the local variable has an valid value
try
//do something with MyObj
finally
MyObj.Free;
end;
Wrong placement of the "try" can result in references to uninitialized
local variables in the "finally" code, with unpredicatable effects.
That's why I prefer to initialize local object variables to Nil, before
entering an try-finally block where they are created. This pattern
allows to use an single try-finally block to protect multiple local objects:
obj1 := nil;
obj2 := nil;
...
try
obj1 := T1.Create;
...
finally
obj1.Free;
obj2.Free;
...
end;
DoDi
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus