c++ - 为这个二进制节点类创建析构函数的正确方法是什么?

标签 c++ tree binary-tree destructor

class node{

private:
node* parent;
node* leftchild;
node* rightchild;
// etc.... 
}

我不想用析构函数创建一个无限循环,这就是为什么我对如何为它制作一个好的构造函数很感兴趣。

最佳答案

NULL 指针上调用delete 不会调用析构函数。
只需在构造函数中将节点设置为 NULL,并且仅在它们应该存在时才分配它们。

因此在析构函数中删除子对象是安全的,因为当“链”到达一个 NULL 的子节点时将停止。

例子:

#include <iostream>

class Node{
public:
  Node() {
    node = NULL;
  }
  ~Node() {
    std::cout << "Deleting" << std::endl;
    delete node;
  }
  void CreateChildNode() {
    node = new Node();
  }
private:
  Node* node;
};

int main()
{
  Node *n = new Node();
  n->CreateChildNode();
  delete n;
  return 0;
}

以上代码片段将输出:
正在删除
删除

关于c++ - 为这个二进制节点类创建析构函数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26944974/

相关文章:

java - 二叉搜索树Tree Implementation,程序终止于eclipse。简单的插入和显示操作

c++ - C++中如何初始化类的私有(private)成员

c++ - 如何确保指针不指向同一个地方

c - 我应该如何使用指向指针的指针到达实际节点?

c++ - 使用空树合并 AVL 树(C++ 模板)

c++ - 使用 Level Order Traversal 将节点插入二叉树

c++ - 查找float类型的内存格式

c++ - 如何将类中的 Int 函数设置为等于 Main 中的 Int

file - 文件树的文本规范?

java - 是否有折叠丰富的事件 :tree node?