用tstringlist作为函数的返回值会不会有问题?(100分)

  • 主题发起人 主题发起人 liuchcn
  • 开始时间 开始时间
L

liuchcn

Unregistered / Unconfirmed
GUEST, unregistred user!
请问这样会不会造成内存汇漏?谢谢!
 
不会呀,比如TMEMO的LINES,TLISTBOX和ITEMS都是返回的TSTRINGS属性
 
但是要注意释放,否则会造成内存泄漏
 
在这里我已经讨论过了
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1583341
 
如果你的strings是在函数内创建的,我建议不要返回strings,因为,这样的话就得在函数外面进行strings对象的释放了,最好遵守原则:谁创建的,谁释放
 
定义的时候用TStrings;调用的时候用TStringList
 
建议使用如下方式:
procedure mytest(var aa:TstringList)
 
楼上说的是引用传值的方式........
 
千万不要这样做,Delphi中返回一个对象是比较愚蠢的做法,因为对象的生存期无法判断,
同时要做一系列的对象创建判断操作。

老老实实的写这样的函数更好
function aaa(param: TStringList);
begin
Assert(Assigned(param));
param....
end;

caller

var
slist: tstringlist
begin
slist := tstringlist.create;
try
...
aaa(slist);
...
finally
slist.free;
end;
end;
 
最好还是符合谁创建谁回收的原则,另外最好传递TStrings,而不是TStringList
比如这么定义
Procedure dolist(AList:TStrings);
begin
AList.Add('test');
end;

procedure test;
begin
dolist(ListBox1.Items);
end;
 
多人接受答案了。
 
后退
顶部