[DUG] Related try..finally question
Todd Martin
toddm at kol.co.nz
Fri Jul 21 15:10:59 NZST 2006
No. Paul's suggestion is the best solution.
Something := nil;
X := nil;
Y := nil;
try
Something := TSomething.Create(nil);
X := TX.Create(blah); //for some reason crashes here
Y := TY.Create();
finally
Something.Free;
X.Free;
Y.Free; //will not throw exception
end;
----- Original Message -----
From: "Conor Boyd" <Conor.Boyd at trimble.co.nz>
To: "NZ Borland Developers Group - Delphi List" <delphi at ns3.123.co.nz>
Sent: Friday, July 21, 2006 2:53 PM
Subject: RE: [DUG] Related try..finally question
> But all your object creation shouldn't really be inside the try's for a
> start.
>
> When you call a constructor, and there's an exception inside the
> constructor, you're guaranteed that Delphi will tidy up the partially
> created instance.
>
> 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;
>
> Don't get me wrong, I don't often go too far down this route, preferring
> instead to refactor into smaller methods for a start.
>
> Dennis' is an interesting suggestion, tho'. I will look into that.
>
> Cheers,
>
> C.
>
> -----Original Message-----
> From: delphi-bounces at ns3.123.co.nz [mailto:delphi-bounces at ns3.123.co.nz]
> On Behalf Of James Sugrue
>
> That's an interesting one. I guess you're talking about something like
> this?
>
> Try
> Something := TSomething.Create(nil);
> X := TX.Create(blah); //for some reason crashes here
> Y := TY.Create();
> Finally
> FreeAndNil(Something);
> FreeAndNil(X);
> FreeAndNil(y); //will throw exception (?) because was never created
> End;
>
> If so then you could just
>
> If (something <> nil) then
> FreeAndNil(something);
>
> ??
>
> (apologies for any coding errors, haven't done much Delphi recently)
>
> _______________________________________________
> Delphi mailing list
> Delphi at ns3.123.co.nz
> http://ns3.123.co.nz/mailman/listinfo/delphi
>
>
>
> --
> Internal Virus Database is out-of-date.
> Checked by AVG Free Edition.
> Version: 7.1.394 / Virus Database: 268.10.1/389 - Release Date: 14/07/2006
>
>
--
Internal Virus Database is out-of-date.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.10.1/389 - Release Date: 14/07/2006
More information about the Delphi
mailing list