Tobjectlist的用法 (50分)

  • 主题发起人 主题发起人 locka
  • 开始时间 开始时间
L

locka

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
objectlist:Tobjectlist;
myobject;tmyobject
begin
myobject:= tmyobject.Create;
objectlist:=tobjectlist.Create;
objectlist.Add(myobject);
objectlist.Clear
//or delete
myobject.Free;
end;
运行时出错,是不是objectlist.clear执行后就无需myobjectlist.free?
如果真是这样的话,那又怎么讲啊(Tmyobject.create创建了一个对象,myobject就是指向它
的一个指针,myobject.free就是通过myobject这个指针找到对象的内存地址释放它;
objectlist.Add(myobject),这是由objectlist存储了myobject这个虚的地址指针,clear释放也应该只是释放
myobject这个虚的地址指针,怎么会也释放myobject指向的内存?)
看了看objectlist的类源码也没看出门道,不知我这样理解对不对,大富翁门帮帮忙
 
TObjectList可以控制其中的控件的内存,自动的释放他。
Delphi的帮助里面说的很清楚呀。
Use TObjectList to store and maintain a list of objects.
TObjectList provides properties and methods to add, delete, rearrange,
locate, access, and sort objects.
If the OwnsObjects property is set to True (the default),
TObjectList controls the memory of its objects,
freeing an object
when its index is reassigned

when it is removed from the list with the Delete, Remove, or Clear method

when the TObjectList instance is itself destroyed.
这里说出了3种情况,会自动释放内存
所以你clear之后,内存已经释放,无需你释放了
 
这是你对TObjectList不了解造成的:)
你这么写:
var
objectlist:Tobjectlist;
myobject;tmyobject
begin
myobject:= tmyobject.Create;
objectlist:=tobjectlist.Create(False);//OwnObjects为False!!!
objectlist.Add(myobject);
objectlist.Clear;
objectlist.Free
//不写就内存泄漏了!
myobject.Free;
end;
明白了么?
 
to:shenloqi
你这个好像也不行啊
 
var
objectlist:Tobjectlist;
myobject;tmyobject
begin
myobject:= tmyobject.Create;
objectlist:=tobjectlist.Create(False);//OwnObjects为False!!!
objectlist.Add(myobject);
objectlist.Clear;
objectlist.Free
//不写就内存泄漏了!
// myobject.Free
这句就不要了
end;
 
多人接受答案了。
 
后退
顶部