delphi 自由TObjectList声明为TList

e0uiprwp  于 2023-05-06  发布在  其他
关注(0)|答案(1)|浏览(209)

列表(及其对象)应该如何声明为

var 
   myList: TList;

创建为

myList := TObjectList.Create;

被释放?
应该在一个循环中分别释放对象,就像在一个简单的TList中一样,还是myList.Free也释放列表中的对象,因为它是作为TObjectList创建的?

tcomlyy6

tcomlyy61#

TObjectList相对于常规TList的优势在于,如果TObjectList.OwnsObjects属性设置为true,则意味着TObjectList将维护已添加到它的对象的生存期。
引用TObjectList文档:
使用TObjectList存储和维护对象列表。TObjectList提供属性和方法来添加、删除、重新排列、定位、访问和排序对象。如果OwnsObjects属性设置为true(默认值),则TObjectList控制其对象的内存,在重新分配其索引时释放对象;当使用Delete、Remove或Clear方法将其从列表中删除时;或者当TObjectList示例本身被销毁时。
因此,如果您将TObjectList设置为拥有其对象(这是其默认行为),则在析构时,它将自动销毁其列表中的每个对象。
例外情况是,如果您使用的是 Delphi 版本,其中对象1具有高级引用计数TObjectList只会减少它所拥有的对象的引用计数。因此,如果这样的对象也在其他地方被引用,它们将不会被销毁,直到这些额外的引用也被删除。
1:对象ARC仅用于iOS和Android平台。它最初是在 Delphi XE 4中引入的,但后来在Delphi 10.4 Sydney中删除,统一了所有平台上的传统对象内存管理模型。

相关问题