我正在考虑在C ++中使用free()
和new
时会发生什么。
如果我们将free()
与new
一起使用,则可以释放内存。它只是析构函数不会被调用。离开行为就像悬挂指针一样。
我理解上面我们不应该将free()
与new
一起使用,因为它可能会损坏堆。
但是我还希望在概念上可视化这种行为。
答案 0 :(得分:8)
在free
分配的内存上使用new
是未定义的行为。无法保证new
返回malloc
返回的地址。 (事实上,new[]
通常不会。)
答案 1 :(得分:1)
根本不应该混合这些。 new
和delete
已配对malloc
和free
。
请记住,new
的行为可以由应用程序完全重新定义,并且可以使用与堆完全无关的分配策略。正因为如此,你不能依靠free
能够对由new
生成的指针做任何事情。他们是两个不同的世界。