Hi Nahum,

No, it is not Ok.
The problem is if THardToFind constructor throw exception, changes and
issues variable will not be deallocated.

Here is two solutions.

1:
        changes := TStringList.create;
        try
                issues := TIssuesList.create;
                try
                        terrorists := THardToFind.create;
                        try
                                // stuff is done, planes flown.  That type of things.
                        finally
                                terrorists.free;
                        end;
                finally
                        issues.free;
                end;
        finally
                changes.free;
        end;

2:

        changes := nil;
        issues := nil;
        terrorists := nil;
        try
                changes := TStringList.create;
                issues := TIssuesList.create;
                terrorists := THardToFind.create;
                // stuff is done, planes flown.  That type of things.
        finally
                changes.free;
                issues.free;
                terrorists.free;
        end;

Regards
Leigh


-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of Nahum.Wild
Sent: Thursday, March 04, 2004 3:37 PM
To: 'NZ Borland Developers Group - Delphi List'
Subject: [DUG] try..finally : Which way is best?


Ok so this is something that has bugged me for ages, partly because I don't
know and partly because I can't be bother trying to figure it out.

is the following code ok? or should I give each it's own try..finally?

--

changes := TStringList.create;
issues := TIssuesList.create;
terrorists := THardToFind.create;
try

// stuff is done, planes flown.  That type of things.

finally
  terrorists.free;
  issues.free;
  changes.free;
end;

--

I mean what could go wrong in the TStringList.create constructor for
example?  It's not like there should be anything much in there that could go
wrong anyway?  Because if it does except the destructor will be immediately
called - learnt that one the hard way many years ago.  As a general rule of
thumb I don't put anything significant in a constructor for my own classes -
that's what init or setup methods are for.

For the record I've never done it this way, I've always given each their own
try..finally.

Thoughts anyone?



Nahum Wild
Software Innovator & Process Consultant
IFE
PayGlobal

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


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

Reply via email to