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

声明为TList但实例化为TObjectList的列表及对象如何释放?

问题解答

当你声明变量为TList但实际创建TObjectList实例时,释放逻辑由实际创建的TObjectList实例决定,而非声明的变量类型:

  • 默认情况下,TObjectList.Create(无参数)会将OwnsObjects属性设为True,此时调用myList.Free时,TObjectList的析构函数会自动遍历列表中的所有对象,逐个调用它们的Free方法,最后再释放列表自身。这种情况下不需要手动循环释放内部对象。

    示例代码:

    myList.Free; // 自动完成内部对象+列表本身的释放
    
  • 如果你创建实例时指定了TObjectList.Create(False),此时OwnsObjects为False,TObjectList的行为就和普通TList一致——调用myList.Free只会释放列表本身,不会处理内部对象,这时就需要手动循环逐个释放列表中的对象,再释放列表。

    示例代码:

    var
      I: Integer;
    begin
      for I := 0 to myList.Count - 1 do
        TObject(myList[I]).Free; // 逐个释放内部对象
      myList.Free; // 释放列表本身
    end;
    

注意:即使变量声明是TList,但运行时实例是TObjectList,所以析构时会执行TObjectList.Destroy,遵循TObjectList的释放规则。另外,TObjectList在释放内部对象时会自动检查对象是否为nil,不用担心空指针问题。

内容的提问来源于stack exchange,提问作者I.P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:59:53