TObjectList释放对象的问题(100分)

  • 主题发起人 主题发起人 沙隆巴斯的主人
  • 开始时间 开始时间

沙隆巴斯的主人

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要从TObjectList中问删除一个对象,执行了以下代码,出现内存访问错误
var
aMyClass : TMyClass;
begin
aMyClass := TMyClass(aList[aList.Count-1]);
aList.Delete(aList.Count-1); //通过
aMyClass.Free; //错
end;

aList是个TObjectList

TMyClass定义如下:
TMyClass = class
private
fCreateTime : TDateTime;
public
function GetCreateTime : TDateTime;
constructor Create;
end;

请告诉我错在哪里?
 
tojbectlist是tlist的子类,tlist的remove事件中会给子类发出notify消息,
看看tobjectlist是如何执行的:

procedure TObjectList.Notify(Ptr: Pointer; Action: TListNotification);
begin
if OwnsObjects then
if Action = lnDeleted then
TObject(Ptr).Free; //释放!!!!
inherited Notify(Ptr, Action);
end;


也就是说重复释放了,当然会出错。

直接使用aList.Delete(aList.Count-1);即可!
 
你说得对,我没细读HELP
 
后退
顶部