procedure test;
var
lst: TStrings;
begin
lst := TStringList.Create;
Exit;
end;
问题是:Exit执行之后,lst会不会释放,会不会存在内存泄露,请高手回答,不要想当然!
var
lst: TStrings;
begin
lst := TStringList.Create;
Exit;
end;
问题是:Exit执行之后,lst会不会释放,会不会存在内存泄露,请高手回答,不要想当然!
procedure test;
var
lst: TStrings;
begin
lst := TStringList.Create;
Exit;
lst.free;
end;或者这样写吧,省的不好理解。
你那个Exit是多余
var
lst: TStrings;
begin
lst := TStringList.Create;
try
//to do
finally
freeAndNil(lst); //创建的对象,最后需要强制释放
end;
end;[/Quote]
否则,你就必须自己释放。
自动回收是真的可计数资源才会自动回收(所谓的自动回收,也是编译器在你的代码中自动插入了释放的代码而已)同时,你问问题的态度很蛮横,别人回答你的问题好像是应当的,这世界上谁也不欠谁,诚心求教就要有诚心求教的态度!
也不是所有在堆上的内存都要手动去释放,比如字符串类型,他是在堆上分配内存的,但是delphi会自动管理这块内存,该释放的时候delphi会负责去释放。
其实应该抱歉的是我,我只顾着这是一个局部变量,而忽略了另外一个事实:
Delphi 使用堆为对象、字符串、动态数组及特殊的动态内存请求(GetMem)内存分配。所以应该要手动释放
首先lst不会自动释放,程序退出时才会自动释放、delphi不是Java、C#,delphi没有垃圾回收机制