什么意思是在C ++中通过删除运算符'破坏'内存?

时间:2013-04-27 11:25:54

标签: c++ memory

我想知道在C ++中被“delete”运算符破坏的内存会发生什么。 以这种方式“破坏”内存意味着将给定的内存设置为0或其他内容吗?

3 个答案:

答案 0 :(得分:6)

它正在销毁(如调用相关的析构函数)传递给delete的对象实例,然后“释放”内存,以便它可以用于其他目的。

C ++标准没有说明delete之后内存的内容是什么,它肯定不能保证为零或任何其他值 - 也不保证它不是零 - 它可能是零,它可能保留以前的所有值,或者它的某些部分可能被改变而其他部分保持不变。

C和C ++作为语言的目标是“只做必要的最小化”,因此典型的免费内存不会覆盖“旧”内存。

当然,你可以在析构函数中使用代码在释放内存之前将内存设置为零。

由于你不应该在删除后使用内存,所以它并不重要。

答案 1 :(得分:4)

delete只释放内存(之前由new分配),如果某个对象已存储在此内存中,则也会调用析构函数。

delete不会更改指针的值,也不会修改已释放的内存,因此您会注意到调用后很多人都习惯将NULL赋给此指针delete只是为了确保它们最终不会取消引用无效(悬空)指针,这会产生 未定义的行为

值得一看:Is it good practice to NULL a pointer after deleting it?

答案 2 :(得分:3)

不,这并不意味着将内存设置为任何特定值 + 。内存只是回到可以重用的值堆中。运行时通常使用返回块的几个字节来存储“簿记”信息,但它们不会将整个块设置为特定值。重复使用内存块后,您的程序就会设置其新值。

<小时/> + 有一些内存分析工具可以让您将已释放的内存设置为某些“垃圾”值,以确保您更快地崩溃。