For-In循环中的对象清理:下述代码的TStringlist是否存在内存泄漏?
TStringList是否会产生内存泄漏?
这段代码肯定会造成内存泄漏,原因如下:
TDemo.GetList函数每次调用都会创建一个新的TStringList实例并返回,这个对象的生命周期需要调用者负责管理- 在
TMain.Something的for-in循环里,直接调用Demo.GetList获取列表进行遍历,但遍历结束后,没有任何代码去释放这个新建的TStringList
Delphi的for-in循环只负责枚举集合元素,不会自动处理返回对象的内存释放。这个由GetList创建的TStringList没有被任何变量持有,遍历完成后没有途径调用它的Free方法,所以内存会一直被占用,形成泄漏。
修复示例
可以通过局部变量持有列表,使用try-finally块确保释放:
procedure TMain.Something; Var S: String; TempList: TStringList; begin TempList := Demo.GetList; try For S IN TempList do begin // 你的遍历逻辑 end; finally TempList.Free; end; end;
内容的提问来源于stack exchange,提问作者Wolfgang Bures
相关产品推荐
相关产品推荐

