You guys don't consider a constructor a function then?
I think its totally stylistic, if you want to have functions returning
objects fine, just make it plain that they do,
IMHO
Neven
I would endorse Rob's answer here.
I don't consider it just a question of potential leaks, it's about
making the intentions of your code clear.
The intention of who has the responsibility for object lifetime is much,
much clearer in Delphi if your caller creates the Stringlist that it
wants populated and frees it afterwards.
I'd tend to make the method a boolean function for example, so you can
test the result of your stringlist filling method; e.g.
Function PopulateString(const sl: TStringList): Boolean;
Begin
//Over-simplified example
if sl.Add('My String') then
Result := True;
End
HTH,
Conor
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
On Behalf Of Robert martin
Your code would leak. You are creating an object and not freeing it.
The calling function that retrieves the result must handle the freeing
of the object.
It might be clearer if you just change the function to a procedure that
takes a TStringList as a parameter. i.e
//Replacement procedure
procedrue NewProc (sl :TStringList);
begin
sl.Add('Blah Blah');
end;
//Calling procedure
procedure call
var
AStringList : TStringList;
begin
AStringList := TStringList.Create;
try
NewProc(AStringLIst);
......
finally
AStringList.Free;
end;
end;
Hope that helps :)
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 :-)
_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: delphi@delphi.org.nz
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to [EMAIL PROTECTED] with Subject: unsubscribe
_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: delphi@delphi.org.nz
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to [EMAIL PROTECTED] with Subject: unsubscribe