It isn't different, but that's because:
List := TStringList.Create;
PopulateList(List);
try
if List.Count > 0 then
begin
.do lots of stuff with the list
End;
Finally
List.Free;
End;
is not safe. You need to move the PopulateList(List) inside the try/finally,
and therein lies the problem if you had encapsulated it together with the
TStringList.Create inside a function (GetLoadsOfStrings). If you want to do
things this way, you should make GetLoadsOfStrings be a constructor instead
(obviously you would have to subclass TStringList to achieve this).
Cheers,
Carl
_____
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Tim Jarvis
Sent: Friday, May 04, 2007 4:30 PM
To: NZ Borland Developers Group - Delphi List; [EMAIL PROTECTED]
Subject: RE: [DUG] Dumb Friday Question
Hi Guys,
Hope you don't mind me sticking my nose in here. Firstly I agree with the
sentiment that you should try and avoid creating objects in one place and
freeing in another, however I don't think that this situation represents
that, think of a function that returns a class as a factory method, these
obviously are quite common and not bad practice at all, in fact a
constructor is a factory type method.
Procedure DoSomthing;
Var
List : TStrings;
Begin
List := GetLoadsOfStrings;
try
if assigned(List) then
begin
.do lots of stuff with the list
End;
Finally
List.Free;
End;
End;
Is really not much different from
Procedure DoSomthing;
Var
List : TStrings;
Begin
List := TStringList.Create;
PopulateList(List);
try
if List.Count > 0 then
begin
.do lots of stuff with the list
End;
Finally
List.Free;
End;
End;
The issue is where the variable is declared, and the scope of the ownership
not the act of creation, creation is fine to delegate to a factory type
method.
Regards Tim.
_____
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Rohit Gupta
Sent: Friday, 4 May 2007 12:22 PM
To: [EMAIL PROTECTED]; NZ Borland Developers Group - Delphi List
Subject: Re: [DUG] Dumb Friday Question
I would go along with Robert, you should not return complex types from
functions that create them, It makes the code messy, you create it in one
place and free it in another. Any sort of code analyser would also complain
about this. You could return a string = stringlist.text and assign it to a
local stringlist.
Jeremy Coulter wrote:
Hi All. This is a question that might be infulenced by some serious lack of
sleep :-)
I have a funtion. Its return result is a TStringlist.
In my code I create a TStringlist then add my values to it, then pass this
to the RESULT varaible for the function.
Now, this is prob. an obvious answer than I prob. do actually know, but if
I got:-
sResult := TStringList.create;
sResult.add('blah');
Result:=sResult;
Then if I free sResult, then I loss the values I added, and the result is
empty as you would expect.
But the issue I have is, so if I DONT free sResults, what happens to it?
Surley it stays in memory,a dn I would end up with a memory leack after
repeaditive calls. Is that right? Or is because the variable is function
specific its free by default etc?
Its a basic question I know....but the more I thought about it the more
uncertain I became....I really need some sleep so that prob. the real
probelm :-)
Jeremy
_____
_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: [email protected]
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to [EMAIL PROTECTED] with Subject:
unsubscribe
--
Rohit Gupta
B.E. Elec. M.E. Mem IEEE Associate IEE
Technical Manager
Computer Fanatics Limited
Tel +64 9 4892280
Fax +64 9 4892290
Email <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED]
Web <http://www.cfl.co.nz/> www.cfl.co.nz
_____
This email and any attachments contain information, which is confidential
and may be subject to legal privilege and copyright. If you are not the
intended recipient, you must not use, distribute or copy this email or
attachments. If you have received this in error, please notify us
immediately by return email and then delete this email and any attachments.
_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: [email protected]
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to [EMAIL PROTECTED] with Subject: unsubscribe