You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

For-In循环中的对象清理:下述代码的TStringlist是否存在内存泄漏?

TStringList是否会产生内存泄漏?

这段代码肯定会造成内存泄漏,原因如下:

  1. TDemo.GetList函数每次调用都会创建一个新的TStringList实例并返回,这个对象的生命周期需要调用者负责管理
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:00:52