我在C ++的书中遇到了以下问题:
“新用什么要求你也叫删除?”
也许你有答案?
答案 0 :(得分:1)
因为这是C ++的设计和方式。这是预期的行为。
目的是提供一个你需要和拥有的内存分配,直到你明确地重新给它。
new
为您提供动态内存分配(在堆上),它将继续存在并且您拥有它,直到您通过调用delete
显式解除分配它。
未能在delete
ed缓冲区上调用new
会将引导至未定义的行为,通常采用的形式。 1 内存泄漏。
答案 1 :(得分:1)
执行new
时,操作系统会将内存分配给您指定的指针。使用完成后,您可能不再需要它了。但内存仍被操作系统标记为“正在使用”。
现在,当指针在函数或任何其他块({}
)的范围内声明时,当块的执行结束时,它将被删除(仅删除指针)。在这种情况下,使用new
分配的内存仍由OS标记为“正在使用”,并且不会分配给调用new
或变量的任何其他指针。这会导致RAM中的孤立内存块,永远不会被使用,因为它的指针已从内存中删除但它将占用内存块。
这称为内存泄漏。一些这样的块也可能使您的应用程序不稳定。
您使用delete
释放此类内存块并释放操作系统,以便它可以很好地用于其他请求
答案 2 :(得分:1)
C ++中没有垃圾收集器,因此您负责释放已分配的内存。无论如何,操作系统"知道"你的程序分配了什么内存。因此,当您的程序退出时,操作系统将再次负责内存。但是如果你有一个长期运行的C ++程序而且从不调用delete,那么noone将帮助你摆脱垃圾。
答案 3 :(得分:1)
调用new已为该对象分配了内存,并且还安排了该对象的构造函数的执行。
你可以通过调用free()释放内存,但实际上你应该使用delete释放new分配的内存,因为这也会导致对象析构函数被执行。