【发布时间】:2011-09-24 23:17:49
【问题描述】:
我注意到了
var
ObjList : TObjectList <TMyObject>;
...
ObjList := TObjectList <TMyObject>.Create (True);
ObjList.Add (TMyObject.Create);
ObjList.Clear;
不释放对象。查看源代码似乎在Clear(继承自TList <T>)中没有触发cnRemoved通知。
我的问题:这是故意的吗?在Clear 的情况下,有什么理由不想收到这些通知?或者这可以被认为是集合类中的一个错误?
编辑
原来是我放的线
inherited Create;
在TMyObject 析构函数的顶部,它应该进入构造函数。这就是为什么我收到内存泄漏报告,看起来TObjectList 没有释放这些项目。一看消息来源就说服了我(我被Count 属性困住了)。无论如何感谢您的帮助!
【问题讨论】:
-
大胆猜测:你是否将
TMyObject.Destroy标记为override? -
你如何测量对象没有被释放?
标签: delphi generics collections delphi-xe