TTreeview如何保存自动删除的对象

近项目要做一项权限的功能,权限是在TTreeview中来展示,但是在Treeview中的子结点经常要存储很多信息。以前我是利用子结点的addObject方法来添加对象,但是这种方法有一个很大的缺点:当需要重新加载权限的时候,自己必须先释放先前分配的对象,这种方法很容易造成内存泄漏。后来我想到能否通过利用继承TTreeNode来保存对象,然后利用它的析构函数来释放对象。经过一阵子的试验,发现这个方法果然方便多了。下面是相应的操作步骤:

1:新建保存权限的类

struct TPrivelege

{

int  ID;

String strName;

ss

};

2:继承TTrreNode类
lass MyNode : public TTreeNode
{
public:   
    void __fastcall  CreatePrev(int Id, String strName)
    {
        temp = new TPrivelege();
        temp->ID = Id;
        temp->strName = strName;
    }
    /*
     __fastcall MyNode(TTreeNodes* AOwner, int Id, String strName);
    {
        TTreeNodes::TTreeNodes(AOwner);//这一句有错
        temp = new TPrivelege();
        temp->ID = Id;
        temp->strName = strName;   
    }
    */
    //很遗憾TTreeNodes::TTreeNodes(AOwner)这句报错,说找不到缺省的构造函数,查看源码明明有,不知道为什么
    __fastcall virtual ~MyNode()
    {
       delete temp;
    }
    TPrivelege* getPrev()
    {
       return temp;
    }
private:
   TPrivelege* temp;
};
3: 设置TTreeview类创建的结点类型为我们自定义的类
TreeView1CreateNodeClass(TCustomTreeView *Sender, TTreeNodeClass &NodeClass)
{
    NodeClass = __classid(MyNode);
}
4: 创建结点的方法
  MyNode* node = dynamic_cast<MyNode*>treeview->Items->Add(NULL, "根结点1");
  node-CreatePrev(1, "tlj");
  MyNode* node2 = (MyNode*)TreeView1->Items->AddChild(node, "222");
  node2->CreateTemp(2, "yxj");
5:获取结点的方法
  MyNode* node = dynamic_cast<MyNode*>treeview->Selected;
  node->getPrev()->ID;
  node->getPrev()->strName;
很遗憾TTreeNodes::TTreeNodes(AOwner)这句报错,说找不到缺省的构造函数,查看源码明明有,不知道为什么。如果TTreeNodes的构造函数能成功调用,那就可以利用MyNode的构造函数来初始对象的数据,而不需要调用CreatePrev方法了。如果大家知道原因的话,可以告诉我。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值