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" <[EMAIL PROTECTED]>
To: "NZ Borland Developers Group - Delphi List" <[email protected]>
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: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
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
[email protected]
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

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

Reply via email to