Mmmm. I thought we had pretty much covered this yesterday. Under Delphi 5 at least (I am beginning to wonder if later versions are different from the number of people posting these sort of alternatives) your suggested solution will result in 3 warnings about changes, issues and terrorists possibly not being initialized. This is bad - you should never have warnings or hints in your application.
You may technically be correct - it seems Delphi does generally initialise object references to nil but my understanding is that this is an undocumented feature. Officially Delphi does NOT initialise local variable object references and the compiler gives warnings occordingly. So, I still stand by my statement that the solution raised by Paul Needham is the shortest safe way of handling errors in the create (as Dennis points out more work is required to safely handle potential destroy errors). David. > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] Behalf Of Allan, Samuel > Sent: Friday, 5 March 2004 9:32 AM > To: [EMAIL PROTECTED]; NZ Borland Developers Group - Delphi List > Subject: RE: [DUG] try..finally : Which way is best? > > > And all object references are set to nil automatically by the compiler, > so you can skip the bob := nil stuff at the start. Unless you were using > the same variable for two different purposes... That being the case, I > would go with (as previously suggested): > > try > changes := TChangesList.Create; > issues := TIssuesList.create; > terrorists := THardToFind.create; > > ... > > finally > terrorists.free; > issues.free; > changes.free; > end; > > If any of the constructors fail, that object gets cleaned up > automatically. It's reference is never set to not nil. All objects are > either freed or not correctly, depending on if the reference was ever > set to not nil (it was created successfully). > > > -----Original Message----- > From: Nahum.Wild [mailto:[EMAIL PROTECTED] > Sent: Thursday, March 04 2004 4:31 p.m. > To: 'NZ Borland Developers Group - Delphi List' > Subject: RE: [DUG] try..finally : Which way is best? > > > Cool my new thing learn't for today! I didn't acutally know you could > safely call free on a nil'ed class/pointer. I've been assuming since D1 > that you couldn't. That has just changed my outlook a bit. > > Thanks. > > Nahum. > > > -----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] Behalf Of Paul Needham > > Sent: Thursday, 4 March 2004 16:17 p.m. > > To: 'NZ Borland Developers Group - Delphi List' > > Subject: RE: [DUG] try..finally : Which way is best? > > > > > > Not so. Check the help on free. > > It is perfectly safe as long as issues and terrorists were set to nil > > first. I think the compiler shows warnings if you don't > > anyway. I could > > have also explicitly checked to see if they were assigned in > > the finally > > but don't generally bother as this is what free does anyway. I am > > willing to concede that calling destroy would be bad though 8). > > > > Paul > > > > > > -----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] > > On Behalf Of Nahum.Wild > > Sent: Thursday, 4 March 2004 4:08 p.m. > > To: 'NZ Borland Developers Group - Delphi List' > > Subject: RE: [DUG] try..finally : Which way is best? > > > > If issues fails then the finally will try to free terrorists, > > which will > > probably cause another exception. :o) > > > > Nahum. > > > > > -----Original Message----- > > > From: [EMAIL PROTECTED] > > > [mailto:[EMAIL PROTECTED] Behalf Of Paul Needham > > > Sent: Thursday, 4 March 2004 15:59 p.m. > > > To: 'NZ Borland Developers Group - Delphi List' > > > Subject: RE: [DUG] try..finally : Which way is best? > > > > > > > > > How about..... > > > > > > issues := nil; > > > terrorists := nil; > > > changes := TStringList.create; > > > try > > > issues := TIssuesList.create; > > > terrorists := THardToFind.create; > > > > > > ... > > > > > > finally > > > terrorists.free; > > > issues.free; > > > changes.free; > > > end; > > > > > > Paul > > > DBSolutions > > > > > > > > > -----Original Message----- > > > From: [EMAIL PROTECTED] > > > [mailto:[EMAIL PROTECTED] > > > On Behalf Of Nahum.Wild > > > Sent: Thursday, 4 March 2004 3:37 p.m. > > > 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 > > > > > > > _______________________________________________ > > 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 > > > > _______________________________________________ > 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 > _______________________________________________ Delphi mailing list [EMAIL PROTECTED] http://ns3.123.co.nz/mailman/listinfo/delphi
