关于TreeView.Item. Data的内存分配问题(一个不容易的问题)

ltolll 2004-07-16 09:26:11
看到别人写的代码,如下:
type
PMyRec = ^TMyRec;
TMyRec = record
FName: string;
LName: string;
end;
...
procedure Button1Click(Sender: TObject);
var
itm:Ttreenode;
MyRecPtr: PMyRec;
begin
itm:=treeview1.Items.Add(nil,'first')
New(MyRecPtr);
MyRecPtr^.FName := 'f';
MyRecPtr^.LName := 'l';
itm.Data:=MyRecPtr;
itm.Parent.Expand(false);
itm.Selected:=true;
end;

1、请问当itm.Data:=MyRecPtr;时是将itm.Data的指针指向MyRecPtr所指向的内存地址,还是重新复制了一块相同内容的内存让itm.Data指向它。
2、既然用了New,用不用Free回收资源,如果用了Free,经过itm.Data:=MyRecPtr的itm.Data是否还继续有效。
3、当Button1Click事件发生多次(超过一次)时,内存是怎样分配的。
...全文
101 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Taken 2004-07-16
  • 打赏
  • 举报
回复
1、指向它,并不重新分配
2、释放了就不再有效了
3、按照你的代码,每次点击按钮都会重新分配的
Taken 2004-07-16
  • 打赏
  • 举报
回复
不需要每次都分配一次空间的,只要初始化好了,下一次直接访问就好了

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧