Conor wrote:

> It gets a bit verbose, but IMHO the correct form is as follows:
>
> Something := TSomething.Create(nil);
> Try
>       X := TX.Create(blah); //for some reason crashes here
>       Try
>               Y := TY.Create();
>               Try
>                       //Do Something
>               Finally
>                  FreeAndNil(y); //will throw exception (?) because was
> never created
>               End;
>       Finally
>               FreeAndNil(X);
>       End;
> finally
>    FreeAndNil(Something);
> End;

This approach whilst leak safe, requires a fair bit more typing when the
object count get up but also adds a lot of exception frame handling code and
metadata to your method. Assigning nil to all objects and then a single
finally block is both less typing and has smaller and faster code size.

Admittedly, if you follow Dennis's suggestion for 'try except around Free'
in your finally for paranoid long-lived server code, you're adding back the
exception handling frames and meta data again but at least it's buying you
something in terms of leak safety.

Mind you, if the Free's in your finally's are causing exceptions themselves
(i.e. exceptions inside Destroy usually), I'd say your server app is likely
mortally wounded anyway and into the cascading exceptions limbo state of no
return (like the Delphi IDE get into from time to time :-)

TTFN,
  Paul.






_______________________________________________
Delphi mailing list
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi

Reply via email to