Re: Fwd: What to do to get new users
Nikolay Nikolov via fpc-pascal <[email protected]>
| Newsgroups | gmane.comp.compilers.free-pascal.general |
|---|---|
| Message-ID | <[email protected]> |
On 1/24/25 4:04 AM, Hairy Pixels via fpc-pascal wrote: > On Jan 24, 2025 at 8:38:25 AM, Nikolay Nikolov via fpc-pascal > <[email protected]> wrote: >> Maybe because there's a much better way to write it: >> >> procedure foo(); >> var >> s1: TStringList = nil; >> s2: TStringList = nil; >> s3: TStringList = nil; >> begin >> try >> s1:=TStringList.create; >> s2:=TStringList.create; >> s3:=TStringList.create; >> doWhatever(s1,s2,s3); >> finally >> FreeAndNil(s3); >> FreeAndNil(s2); >> FreeAndNil(s1); >> end; >> end; >> >> Best regards, >> >> Nikolay > > I’ve basically never used try..finally in my own code but I have seen > really ugly nested like about in other projects. Then your code will probably cause memory leaks in case of exceptions, and even worse - leaks of other resources (file handles, sockets, etc.). > This a down stream consequence of exceptions right? That's a downstream consequence having error handling with proper cleanup, regardless of whether the language uses exceptions, or not. Consider the case, without exceptions, as is typical for procedural APIs: function foo: LongInt; var s1, s2, s3: TStringList; begin s1 := Create_StringList; if s1=nil then begin Result := error; exit; end; s2 := Create_StringList; if s2=nil then begin Free_StringList(s1); Result := error; exit; end; s3 := Create_StringList; if s3=nil then begin Free_StringList(s1); Free_StringList(s2); Result := error; exit; end; if not doWhatever(s1, s2, s3) then begin Free_StringList(s1); Free_StringList(s2); Free_StringList(s3); Result := error; exit; end; {...etc.} Free_StringList(s1); Free_StringList(s2); Free_StringList(s3); end; As you can see, it's more complicated and more error prone. You can simplify it a little bit with goto, but it will never be better, compared to try...finally Best regards, Nikolay _______________________________________________ fpc-pascal maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal