gpt4 book ai didi

delphi - VirtualTreeView 是否管理节点用户数据的内存,或者我可以吗?

转载 作者:行者123 更新时间:2023-12-03 15:44:48 27 4
gpt4 key购买 nike

我开始使用 VirtualTreeView,从所有网络信息和文档看来,VirtualTreeView 管理用户提供的数据的内存(如果有记录)。无需 New() 和 Dispose() 任何用户数据。只需在调用 GetNodeData 后告诉 VirtualTreeView userdata 的大小并分配其字段值即可。

如果我想管理这个怎么办?能做到吗?我可以根据需要创建用户数据并将其添加到我自己的列表中,并且仅向 VirtualTreeView 提供每个记录的指针而不干扰吗?

最佳答案

One only has to tell VirtualTreeView the size of userdata and assign its field values after calling GetNodeData

这并不完全正确 - 如果用户数据记录包含需要它的数据类型,则还必须注意最终确定它 - 即引用计数类型,如字符串和接口(interface)。这是在 OnFreeNode 事件中完成的。因此,如果您的数据记录包含字符串

type
TMyNodeData = record
Foo: string;
end;

那么当节点的数据被释放时,你必须为其分配空字符串:

procedure TForm1.VT_FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var ND: PMyNodeData;
begin
ND := Sender.GetNodeData(Node);
if(ND <> nil)then begin
ND.Foo := '';
end;
end;

否则你会泄漏该字符串。

自己管理内存的最简单方法是根本不使用VT的用户数据记录,或者只使用指向其中其他数据结构的指针。

关于delphi - VirtualTreeView 是否管理节点用户数据的内存,或者我可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34442464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com