初级有关问题:TTreeNode.Data的值是否可以设置为一个指向类对象的指针

初级问题:TTreeNode.Data的值是否可以设置为一个指向类对象的指针?
如题所述,是否可以将一个类对象设置到TTreeNode.Data上,这个我知道是可以的,但是如果将指向的类对象声明为局部变量时,在其它地方调用TTreeNode.Data时将出现空引用的现象,那么大家来说说如何才能够让TTreeNode.Data直接指向一个类对象呢,你们是怎么解决的呢?

------解决方案--------------------
对象的变量只含有一个内存中对象的引用,把对象的变量的值赋给TTreeNode.Data,就相当于指针赋值;
TTreeNode.Data和对象的变量指向同一个内存空间;
个人认为,直接赋值就可以;对象的变量没值时,将指向空;
------解决方案--------------------
当函数调用完的时候局部变量会被释放,但开辟的内存和创建的实例并不会自动被释放
参考如下代码:
Delphi(Pascal) code
function AddNode(ATreeView: TTreeView): TTreeNode;
var
  vForm: TForm;
begin
  Result := ATreeView.Items.Add(nil, '测试');
  vForm := TForm.Create(nil);
  vForm.Caption := 'Zswang 路过';
  Result.Data := vForm;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  vTreeNode: TTreeNode;
begin
  vTreeNode := AddNode(TreeView1);
  TForm(vTreeNode.Data).Show;
end;

------解决方案--------------------
//对象就是指针,直接写行
procedure aa(s: TObject);
begin
TreeView1.Items[0].Data:=s;
end;
------解决方案--------------------
局部指针变量开辟空间后,空间不会自动释放;

new(cp_Arr[i]); //申请空间
cp_Arr[i]^:= adoquery1.fieldbyname('cpbh').value;

cur_node:=TreeView1.Items.addchild(root_node,cp_Arr[i]^); //产品生成树
cur_node.data:=cp_Arr[i]; //指针赋值


这里的cp_Arr[i]指针变量是局部,退出过程会释放cp_Arr[i],但空间还在,就是cur_node.data所指;
这个申请空间的空间后面由,TreeView1.Free释放;

TreeView1.Free; //释放指针内存

希望对你有帮助,有错的地方也希望大虾指点;共同学习;