我在这个代码里面要不要 Free?(100分)

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

let_it_be

Unregistered / Unconfirmed
GUEST, unregistred user!
function TFrSlUser.getSelectUsers: TStringList;
begin
Result:=TStringList.Create;
result.add('aaaaa')
end;
这样好像没有将result.free,会不会造成内存泄漏?
另外:
class function TfmSendto.SendOut: boolean;
begin
with Create(nil) do
try
showModal;
result:=ModalResult=mrOk;
finally
Release
//这个Release要不要?
end;
end;

 
不用,Delphi自己会释放
 
如果程序中有:
var sl:tstringlist;
begin
sl:=getSelectUsers;
sl的操作...
.....
sl.free;{这里就要加上。}
end;

end;
 
可以在退出时一起释放呀,不过最好是用完就释放
 
应该会有泄漏
两种解决方法
1 var
t:tstringlist=nil;
t:=getselectusers;
...
t.free;
t:=nil;
2 用过程传递tstringlist对象


需要

这是我的见解,可能是错的
 
function TFrSlUser.getSelectUsers: TStringList;
begin
Result:=TStringList.Create;
result.add('aaaaa')
end;
这样好像没有将result.free,会不会造成内存泄漏?

会造成内存泄漏

最好是写一个过程
传一个var tstringlist进去


 
会的。这样做吧。:

procedure hello(a:TStrings);
begin
a.Text:='xxxxxxxxxxxxx';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
a: TStrings;
begin
a:=TStringList.Create;
try
hello(a);
showmessage(a.Text);
finally
a.Free;
end;
end;
 
按着ctrl键,鼠标点free(随便写一个free),就会发现代码
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
由此可判断,如果对象没有释放,则释放,如果已经释放,则什么也不做,
故,你的代码此处为保险期间,加上为好!
 
->没有将result.free,会不会造成内存泄漏
只能说有可能造成泄漏,但不一定!另外并不一定需要在开始处使用result=Tsomeobject.create;方法来创建,编译器会你办好!
 
不会泄漏吧?我见delphi的帮助中也有这么写的(with Txxx.Create do),也没有释放。
 
我认为会造成内存泄露,因为没有宿主替你释放.
 
var
TempList: TStringList;
begin
TempList := getSelectUsers;
try
//执行语句
finally
TempList.Free;
end;
end;
//一定要用保护释放
 
我的回答:
function TFrSlUser.getSelectUsers: TStringList;
begin
Result:=TStringList.Create
[red]这是必须的!!![/red]
result.add('aaaaa')
end;
这样好像没有将result.free,会不会造成内存泄漏? [blue]不会造成泄漏[/blue]
另外:
class function TfmSendto.SendOut: boolean;
begin
with Create(nil) do
try
showModal;
result:=ModalResult=mrOk;
finally
Release
//这个Release要不要?
[blue]看情况,如果你需要将实例Free掉,就要,我建议要 [/blue] end;
end;
 
我习惯跟aerobull一样的写法![:D]
 
请xuxiaohan解释一下你的回答,ok?[:)]
 
Delphi自己会释放
 
有无人详细说明一下Delphi为什么会释放?
我的感觉是函数返回这个TStringList后,需要获得这个返回值的程序自己Free。
 
function TFrSlUser.getSelectUsers: TStringList;
begin
Result:=TStringList.Create;
result.add('aaaaa')
end;
这样好像没有将result.free,会不会造成内存泄漏?
----------------------------------------------------------------
当然不应该result.free,否则调用getSelectUsers的地方会出错,应该
调用者负责free
 
winbell说的:
>另外并不一定需要在开始处使用result=Tsomeobject.create;方法来创建,编译器会你办好!

感觉也不对。

function TForm1.GetStrList: TStringList;
begin
Result.Add('xxxx');
end


这样会出AV。
 
Delphi自己会释放!!!!!!!!!!!!!!!!!!!!!!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
396
import
I
I
回复
0
查看
686
import
I
顶部