gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:43:20 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com