使用new需要你怎么称呼删除?

时间:2012-03-29 06:36:28

标签: c++ oop new-operator delete-operator

我在C ++的书中遇到了以下问题:

  

“新用什么要求你也叫删除?”

也许你有答案?

4 个答案:

答案 0 :(得分:1)

因为这是C ++的设计和方式。这是预期的行为。
目的是提供一个你需要和拥有的内存分配,直到你明确地重新给它。

new为您提供动态内存分配(在堆上),它将继续存在并且您拥有它,直到您通过调用delete显式解除分配它。 未能在delete ed缓冲区上调用new会将引导至未定义的行为,通常采用的形式。 1 内存泄漏。

1 讨论了here

答案 1 :(得分:1)

执行new时,操作系统会将内存分配给您指定的指针。使用完成后,您可能不再需要它了。但内存仍被操作系统标记为“正在使用”。

现在,当指针在函数或任何其他块({})的范围内声明时,当块的执行结束时,它将被删除(仅删除指针)。在这种情况下,使用new分配的内存仍由OS标记为“正在使用”,并且不会分配给调用new或变量的任何其他指针。这会导致RAM中的孤立内存块,永远不会被使用,因为它的指针已从内存中删除但它将占用内存块。

这称为内存泄漏。一些这样的块也可能使您的应用程序不稳定。

您使用delete释放此类内存块并释放操作系统,以便它可以很好地用于其他请求

答案 2 :(得分:1)

C ++中没有垃圾收集器,因此您负责释放已分配的内存。无论如何,操作系统"知道"你的程序分配了什么内存。因此,当您的程序退出时,操作系统将再次负责内存。但是如果你有一个长期运行的C ++程序而且从不调用delete,那么noone将帮助你摆脱垃圾。

答案 3 :(得分:1)

调用new已为该对象分配了内存,并且还安排了该对象的构造函数的执行。

你可以通过调用free()释放内存,但实际上你应该使用delete释放new分配的内存,因为这也会导致对象析构函数被执行。