自由 TObjectList 声明为 TList

问题描述 投票:0回答:1

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

var 
   myList: TList;

并创建为

myList := TObjectList.Create;

被释放?

是否应该像简单的

TList
一样在循环中单独释放对象,或者
myList.Free
也会释放列表中的对象,因为它被创建为
TObjectList

delphi delphi-2010
1个回答
1
投票

TObjectList
相对于常规
TList
的优势在于,如果
TObjectList.OwnsObjects
属性设置为 true 那么这意味着
TObjectList
维持已添加到其中的对象的生命周期。

引自

TObjectList
文档:

使用TObjectList 来存储和维护一个对象列表。对象列表 提供属性和方法来添加、删除、重新排列、定位、 访问和排序对象。如果 OwnsObjects 属性设置为 true (默认),TObjectList 控制其对象的内存,释放 重新分配其索引时的对象;当它从 使用 Delete、Remove 或 Clear 方法列出;或者当 TObjectList 实例本身被销毁。

所以,如果你将你的

TObjectList
设置为拥有它的对象(这是它的默认行为),在它被销毁时它会自动销毁它列表中的每个对象。

如果您使用带有 Advanced Reference Counting 的 Delphi 版本,则例外,其中

TObjectList
只会减少它拥有的对象的引用计数。因此,如果这些对象也在其他地方被引用,那么在这些额外的引用也被删除之前它们不会被销毁。

© www.soinside.com 2019 - 2024. All rights reserved.