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
