gpt4 book ai didi

二叉树的 C++ 析构函数

转载 作者:行者123 更新时间:2023-11-30 00:46:37 25 4
gpt4 key购买 nike

当我运行析构函数时,我运行失败,我不确定为什么这是我的树头

class ExpressionTree {
private:
ExpressionNode* root;
public:
ExpressionTree() :
hashmap(100000),
root(NULL) {
};
virtual ~ExpressionTree(){
helper(root);
}

void helper(ExpressionNode *node) {
if ( !node ) {
return;
} else {
helper( node->getLeft( ) );
helper( node->getRight( ) );
delete node;
}
}
};

和我的节点头

class ExpressionNode {
private:
ExpressionNode* left;
ExpressionNode* right;
string data;
public:
virtual ~ExpressionNode(){
delete left;
delete right;
}
};

现在一切正常,如果在 ExpressionTree 类中我只破坏根,但我相信我正在以这种方式泄漏内存。这实际上是正确的方法还是我的递归破坏有问题。

最佳答案

ExpressionNode 析构函数充分清理了它的内存,因为它破坏了它的子节点,这些子节点充分清理了它们的内存等等。您现在正在做的是双重释放节点;一次由 helper() 进行,一次由析构函数本身进行。您需要做的就是销毁根节点

virtual ~ExpressionTree(){
delete root;
}

所有子节点将通过析构函数删除。

关于二叉树的 C++ 析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37708643/

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