如何删除带有指针子节点的类节点

时间:2014-10-25 06:26:52

标签: c++ class pointers binary-tree header-files

我在删除名为tree2的私有成员类时遇到错误,我尝试使用"**""&*""*&"但我只是在出错后不断收到错误。

标题文件:

class tree1
{  
    private:
    class tree2
       {
         tree2*child;
         tree2**child2;
         int data;
        };
    void clear( tree2** the_root);
    tree2* root;
};

我是那个把清晰功能放在那里的人。所以我进入.cpp文件并以这种方式实现:

void tree1::clear(tree2** TheRoot)              
{
   if(*TheRoot == NULL) { return; } 

   clear(&(*TheRoot->child1));                                                      
   clear(&(*TheRoot->child2));

   delete TheRoot;          
   TheRoot = NULL;
}

然后在一个使用clear的函数中,我称之为clear(root)clear(&root)clear(*root)clear(&*root)。所有组合都失败了,我不断得到错误。删除此课程的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

您似乎希望删除后root - 指针为NULL。这就是为什么仅仅将tree2*作为参数传递是不够的并且tree2**是必要的原因。

delete TheRoot;不会删除root,而是删除指向root的指针(在您的示例中未通过new分配,因此会导致一些隐藏错误。同样的问题出在下一行。您可以通过编写delete *TheRoot; *TheRoot = NULL;来解决此问题。

但是由于你使用的是C ++,你可以像tree2*&那样传递:

void tree1::clear(tree2*& TheRoot)              
{
   if (TheRoot == NULL) { return; } 

   clear(TheRoot->child1);                                                      
   clear(TheRoot->child2);

   delete TheRoot;    
   TheRoot = NULL;
}

并将其称为clear(root);

答案 1 :(得分:0)

如果要修改值,则需要使用clear(& root)调用它。在一边,你做* root = null来清除它。

答案 2 :(得分:0)

仅使用tree2tree2*(指向tree2类型的指针)数据类型就足够了,不要使用tree2**(指向指针的指针)。 )。

不要指望指向的元素为NULL,而是将指针值设置为NULL,只需检查指针值以确定它们是否指向已分配的内存。