如何处理的代码!(100分)

  • 主题发起人 主题发起人 Nizvoo
  • 开始时间 开始时间
N

Nizvoo

Unregistered / Unconfirmed
GUEST, unregistred user!
定义一个函数

function aa: TStringList;
var
stlResult: TStringList;
begin
stlResult := TstringList.Create;
Result := stlResult;
stlResult.Free
//如果无此句,则正确,因为释放后Result就不知道指向哪里了
end;

请指教,批评

 
调用这个函数实际上是生成一个TStringList的实例,如果在最后Free掉它的话,就完全没有意义了。
老实说, 这要的函数没有存在的必要。
除非能给出上下文来证明它有存在的理由。
不过我想不出来~~~
 
动态创建的一个基本原则就是谁创建谁释放, 你要把动态创建的实例返回个上级函数
那么就应该有上级负责释放他, 如果这样的话,你的stResult.Free, 是多余的
 
谢谢,继续讨论吧!~~~~~~~~~

好像没意义。但有时候需要返回一个TStringList
 
你都把他Free了,还指望用什么.
Delphi对所有TObject的子类的实例都是址引用,不象VC.
 
"好像没意义。但有时候需要返回一个TStringList"
如果确实要用到,可以如下定义啊:
procedure GetStrList(var AStrList:TStringList);
然后在该过程外部创建一个TStringList实例,然后传给这个过程,在过程里面给这个实例
赋值啊。试试吧
 
不接受答案,请继续讨论,分好说。`
 
function aa: TStringList;
var
stlResult: TStringList;
begin
stlResult := TstringList.Create;
Result.Assign(stlResult);
stlResult.Free

end;
 
procedure 调用过程;
var l_List: TStringList;
begin
l_LIst:=TStringList.Create;
aa(l_List);
...
l_List.Free;
end;

procedure aa(a_List: TStringList);
begin
a_List.Add(...);
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部