【发布时间】:2014-08-01 20:46:37
【问题描述】:
如果这是一个太基本的问题或者它很常见,我深表歉意 - 我在这里以及在 Google 上搜索都没有运气。
我正在尝试删除二叉树中的一个节点,但删除运算符似乎什么也没做。
这是我的节点:
struct node {
node(int value) : left(NULL), right(NULL), quantity(1) { val = value; }
int val;
int quantity;
node* left;
node* right;
}
还有我的测试代码:
node* test = new node(15);
cout<<test<<'\n'; //Outputs memory address
cout<<test->val<<'\n'; //Outputs 15
delete test;
cout<<test<<'\n'; //Outputs same memory address
cout<<test->val<<'\n'; //Outputs 15
非常感谢任何帮助!我查看了文档,并没有看到任何关于批量内存清理的信息,这表明它会在以后被清理。
【问题讨论】:
-
访问刚刚删除的内容是未定义的行为。
delete就像它说的那样释放内存,如果你有一个日志析构函数,你会看到刚刚执行的delete的输出并被刷新。内存中是否还有旧的东西在任何方面都不可靠。 -
delete通常所做的只是破坏对象并使内存块有资格重复使用,因此稍后对new的调用可能会收到相同的地址(或块的地址无论如何,它包括相同的内存——可能是同一块的子集或超集)。这并不意味着内容一定会立即消失(尽管可能)。 -
阅读此问题的答案。基本上是一样的。 stackoverflow.com/questions/6441218/…
-
我没有意识到
new和delete被添加到 C... -
也许只是我厌倦了人们将问题标记为 C 和 C++,而这显然是其中之一