2011-07-01 45 views
7

我有一个包含一个或多个对象的TObject列表(FileEventObjects := TObjectList.Create(True);)。对象需要留在列表中,直到它们被处理。 (对象列表在应用程序存在。)Delphi从TObjectList中删除一个对象

我不完全确定如何从列表中删除处理的对象。

将对象是“释放”如果我做FileEventObjects.Delete(i)

在那里的行动TObjectLists有用的例子中的任何链接?

问候,彼得。

+1

如果你曾经好奇,如果一个对象被越来越解脱出来,将此行添加到析构函数中:OutputDebugString('Freeing TMyclassName');每次调用时您都会在事件日志中看到它。或者在TMyclassName.Destroy中设置一个断点。您甚至可以打开快速MM的内存泄漏检测器,并且您会收到关于没有正确释放的对象的警告。 –

回答

12

如果传递TrueTObjectList构造函数(它也是True默认),列表,只要你从集合中删除它释放的任何物体,不管你使用DeleteRemoveClear

除此之外,TObjectList可以像TList一样使用。

+0

我很害怕回答这个问题,因为我不知道当你使用这些功能时它是否释放它。感谢您清理那个,+1 :) – Jeff

+15

您可以使用'.Extract()'从列表中移除一个对象而不释放它。 –

+0

感谢您提供的答案。 –

4

永远记住循环向后像

for i := Pred(objectlist.Count) downto 0 do 
begin 
    objectlist.items[i].process; 
    objectlist.delete(i); 
end; 

,如果你从0循环计数-1,而删除的项目,你会得到访问冲突

+2

是的,我昨天发现了困难的方式! –