from:http://delphi.about.com/od/delphitips2008/qt/return_strings.htm
如果一个函数返回的对象不是我们经常使用的integer,string..而是Tstringlist、Tbutton等object那怎么办呢?
为什么会有这个问题,因为函数的result是一个object,按照object pascal要求,是需要其owner释放(free)。
举例:
function GetStringList: TStringList;
begin
result := TStringList.Create;
result.Add('an item') ;
end;
begin
result := TStringList.Create;
result.Add('an item') ;
end;
以上面的函数中,是没有释放result的。那会不会造成“leak Memory”呢?
文中的作者提醒,只要调用后,进行释放就可以了。
var
sl : TStringList;
begin
sl := GetStringList;//sl指向GetStringList的内存,因此后面释放sl,相当释放了GetstringList函数内部申请的内存。
try
ShowMessage(sl[0]) ;
// or something like
// ListBox1.Items.Assign(sl) ;
finally
sl.Free;
end;
end;
结果就是:要使用一个变量进行“参照”,通过变量进行释放
sl : TStringList;
begin
sl := GetStringList;//sl指向GetStringList的内存,因此后面释放sl,相当释放了GetstringList函数内部申请的内存。
try
ShowMessage(sl[0]) ;
// or something like
// ListBox1.Items.Assign(sl) ;
finally
sl.Free;
end;
end;