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/