TStringList是否可以自动释放其附加到项目的对象?

8

我正在将一些TObject的子类添加到一个TStringList中,例如通过调用AddObject。 我希望当我释放列表对象时它们也被释放。 有没有办法实现这个?


4
这是一个重复的问题,与 http://stackoverflow.com/questions/9148659/how-to-free-objects-in-stringlist-in-delphi-7 相同,但那个问题写得很差。这就是阻止我将其标记为重复的原因。 - Cosmin Prund
1
@iMan 我已经从问题中删除了代码。将其包含在问题中没有太大意义,因为它几乎已经回答了问题。如果您自己回答问题,最好将答案部分保留在答案中。无论如何,实现细节并不需要,只需参考文档即可,就像我在编辑您的答案时所做的那样。 - David Heffernan
@DavidHeffernan 实际上,当我在写问题时,我找到了答案,并认为在这里写下来可能会节省其他人几分钟的时间。 - iMan Biglari
无论如何,在旧的字符串列表中添加OwnsObjects并不是很难。 - Arioch 'The
1个回答

14
TStringListOwnsObjects 属性应该设置为 True,这样当列表被销毁时就会释放其对象。可以通过调用接受 OwnsObjects 参数的构造函数重载,或在创建后显式设置属性来实现。最好在对象构造的同时设置 OwnsObjects文档对该属性的描述如下:

OwnsObjects 属性指定字符串列表是否拥有存储的对象。如果将 OwnsObjects 属性设置为 True,则 Destroy 析构函数会释放为这些对象分配的内存。


有没有TStrings的字段? - none
1
如果你的意思是询问TStrings类中是否有OwnsObjects属性,那么答案是否定的。因为这个机制是在TStringList中实现的,而不是在它的祖先类TStrings中。 - TLama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接