我有一个包含一个或多个对象的TObject列表(FileEventObjects := TObjectList.Create(True);
)。对象需要留在列表中,直到它们被处理。 (对象列表在应用程序存在。)Delphi从TObjectList中删除一个对象
我不完全确定如何从列表中删除处理的对象。
将对象是“释放”如果我做FileEventObjects.Delete(i)
在那里的行动TObjectLists有用的例子中的任何链接?
问候,彼得。
我有一个包含一个或多个对象的TObject列表(FileEventObjects := TObjectList.Create(True);
)。对象需要留在列表中,直到它们被处理。 (对象列表在应用程序存在。)Delphi从TObjectList中删除一个对象
我不完全确定如何从列表中删除处理的对象。
将对象是“释放”如果我做FileEventObjects.Delete(i)
在那里的行动TObjectLists有用的例子中的任何链接?
问候,彼得。
如果传递True
到TObjectList
构造函数(它也是True
默认),列表,只要你从集合中删除它释放的任何物体,不管你使用Delete
,Remove
或Clear
。
除此之外,TObjectList
可以像TList
一样使用。
我很害怕回答这个问题,因为我不知道当你使用这些功能时它是否释放它。感谢您清理那个,+1 :) – Jeff
您可以使用'.Extract()'从列表中移除一个对象而不释放它。 –
感谢您提供的答案。 –
永远记住循环向后像
for i := Pred(objectlist.Count) downto 0 do
begin
objectlist.items[i].process;
objectlist.delete(i);
end;
,如果你从0循环计数-1,而删除的项目,你会得到访问冲突
是的,我昨天发现了困难的方式! –
如果你曾经好奇,如果一个对象被越来越解脱出来,将此行添加到析构函数中:OutputDebugString('Freeing TMyclassName');每次调用时您都会在事件日志中看到它。或者在TMyclassName.Destroy中设置一个断点。您甚至可以打开快速MM的内存泄漏检测器,并且您会收到关于没有正确释放的对象的警告。 –