请教:TreeView的节点指向数据的释放问题(50分)

  • 主题发起人 SimpleMan
  • 开始时间
S

SimpleMan

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi帮助中有下面的Example:
procedure TForm1.Button1Click(Sender: TObject);

var
MyRecPtr: PMyRec;
TreeViewIndex: LongInt;
begin
New(MyRecPtr);
MyRecPtr^.FName := Edit1.Text;
MyRecPtr^.LName := Edit2.Text;
TreeViewIndex := StrToInt(Edit3.Text);
with TreeView1 do
begin
if Items.Count = 0 then
Items.AddObject(nil, 'Item' + IntToStr(TreeViewIndex), MyRecPtr)
elseif (TreeViewIndex < Items.Count) and (TreeViewIndex >= 0) then
Items.AddObject(Items[TreeViewIndex], 'Item' + IntToStr(TreeViewIndex), MyRecPtr);

end;
end;

//New(MyRecPtr);这句创建了指针,然后赋给TreeNode.Data,之后我们可以如下使用这个数据:
procedure TForm1.Button2Click(Sender: TObject);

begin
Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + ' ' +
PMyRec(TreeView1.Selected.Data)^.LName;
end;

~~~~~~~~~~~~
请问:程序结束的时候是否需要遍历TreeView的节点释放掉这个Data指向的数据呢?
还是Delphi会自己释放它?为什么?
担心会有内存泄漏所以问问大家? 100分敬上。
 
可以明确的是delphi是不会处理这个data属性的,你可以看free的代码,
简单的说吧,谁创建的谁释放,delphi自己创建的,他自己会释放的,你创建的当然就要你来释放了
 
这个问题是这样的,如果你的TreeNode的data指向的是一个组件对象,并
且Create的时候Owner是你的Form就没有问题。但是如果指向的是一个
记录则必须释放指针申请的空间。因为对象变量实际就是一个指针,
Free的时候会Dispose的。而你的Owner会遍历自己的Components,释放之!~
 
我遍历TreeNodes,然后用FreeMemory(TreeNodes.item.Data)

这样OK了,谢谢大家,在csdn上问了半天没人理
 
顶部