[DUG] Related try..finally question

James Sugrue jamessugrue at xtra.co.nz
Fri Jul 21 15:13:33 NZST 2006


Not that it applies too much to this example, but this is why I like C# and
the GC. Don't really have to worry about freeing objects. Only thing you
need to be concerned with is closing data connections and files.

Also, 
try 
catch 
finally 

is a better mechanism than 
try 
  try 
  except 
finally 

IMHO.

-----Original Message-----
From: delphi-bounces at ns3.123.co.nz [mailto:delphi-bounces at ns3.123.co.nz] On
Behalf Of Conor Boyd
Sent: Friday, 21 July 2006 2:53 p.m.
To: NZ Borland Developers Group - Delphi List
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



More information about the Delphi mailing list