怎样让一个函数返回一个tstrings的值?(20分)

  • 主题发起人 主题发起人 ildg
  • 开始时间 开始时间
使用TStringList或者Create TStrings的时候使用TSringList的 Create
 
我测试了一下,没有发现有什么问题,不过我手头上没有内存泄露检测工具,
无法说明问题
代码如下:
function newStringList(strAdd:string):TStringList;
begin
Result:=TStringList.Create;
Result.Add(strAdd);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
strlNew:TStringList;
begin
strlNew:=newStringList('nihao');
Memo1.Lines.Add(strlNew.Text);
strlNew.Free
//
end;
 
不好意思,没看清题目,没帮倒忙吧 ;)
 
:)我找到《DELPHI技术手册》
RESULT是一种特殊的类型,不是局部变量,使用他最好初始化,我认为只要你记的释放
他就应该没有太大的问题
 
来自:张无忌, 时间:2002-8-3 20:52:00, ID:1241048
function FuncName () :TStrings
begin
Result:=TStrings.create;
Result.add( 'Your returned string');
end;
这样写是有问题的 应为
TStrings is an abstract base class for objects that represent a list of strings.
也就是说TStrings 是一个抽象类 不能被实类化。
而楼主要返回一个TStrings类,也就是说返回的结果付给一个TStrings类。
比如
Memo1.Lines = FuncName
//function FuncName () :TStrings
其实你可以让函数返回一个TStrings的子类,也就是TStringList;
效果如下
Memo1.Lines = FuncName
//function FuncName () :TStringsList;
这样就可以了
关于子类可以付给父类的详细说明 请参见《DELPHI4技术内幕》
至于对方是否释放,楼上的说的已经很清楚了
 
我后面的代码改正了这个问题,我只是修改了楼主的代码,你好好看他的帖子的标题把![8D]
 
多人接受答案了。
 
后退
顶部