2

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

4

3 回答 3

6

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

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

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

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

由于您不应该在删除内存后使用内存,因此这并不重要。

于 2013-04-27T11:34:19.580 回答
4

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

delete不会更改指针的值,也不会修改已释放的内存,因此您会注意到许多人习惯于NULL在调用后分配给该指针,delete以确保他们不会以解除引用无效(悬空) 指针,它产生未定义的行为

值得一看:删除指针后将指针设为 NULL 是一种好习惯吗?

于 2013-04-27T11:33:59.133 回答
3

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


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

于 2013-04-27T11:37:05.773 回答