[DUG] Dumb Friday Question

Alister Christie alister at salespartner.co.nz
Mon May 7 13:35:30 NZST 2007


I'd tend to agree factory methods can be very helpful in simplifying code.

Alister Christie
Computers for People
Ph: 04 471 1849 Fax: 04 471 1266
http://www.salespartner.co.nz
PO Box 13085
Johnsonville
Wellington 



Neven MacEwan wrote:
> 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: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz]
>> 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 at delphi.org.nz
>> Admin: http://delphi.org.nz/mailman/listinfo/delphi
>> Unsubscribe: send an email to delphi-request at delphi.org.nz with 
>> Subject: unsubscribe
>>
>>
>>   
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at delphi.org.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at delphi.org.nz with 
> Subject: unsubscribe
>
>


More information about the Delphi mailing list