我正在实现一个AVL树。从树中删除节点正如预期的那样工作,例如,如果我删除节点的左叶,则子节点将指向nullptr。
但是,由于该(现已删除)节点曾经使用' new' -keyword创建,是否有必要以某种方式释放它占用的内存?我的节点看起来像这样:
struct Node {
const int key;
short balance = 0;
Node* left = nullptr;
Node* right = nullptr;
Node(const int key);
Node(const int key, Node *left, Node *right);
~Node();
}
我所说的是:即使已删除的节点不再包含在树中,例如什么都没有指向它,它是否超出范围'并自动从内存中删除?或者我必须将它的右/左指针设置为nullptr?
谢谢!
答案 0 :(得分:1)
但是,因为那个(现在已删除)节点曾经用。创建过 '新' - >关键字,是否有必要以某种方式释放它所需的内存 吗?
这不是强制性的,但如果您想避免在某些时候吃掉所有内存,那么您需要,并且使用delete
关键字
我所说的是:即使删除的节点不包括在内 树,例如,什么都没有指向它,它是否会出现 范围'并自动从内存中删除?
不,c++
还有更多"现代"如何做你正在做的事情,但我觉得这比其他事情更像是一种学习练习,在这种情况下,将delete
来电与你的new
电话进行手动匹配是一种了解内容的好方法。继续如果你想要,你可以搜索"智能指针"。
答案 1 :(得分:0)
简而言之:是的。你必须释放记忆。据我所知,C ++只会自动为没有' new'声明的对象释放内存。它们在函数返回时被删除。您可以让删除节点函数返回已删除节点的内存地址,或者只要找到该函数就将其删除。
澄清一下,不,你不必须释放任何内存,因为程序退出时它是免费的,但一旦程序出现内存泄漏是一个糟糕的时间或者它的执行时间增长。