我们在C ++中有一个悬空对象的概念吗?

时间:2012-08-30 19:05:31

标签: c++ new-operator free

我正在考虑在C ++中使用free()new时会发生什么。

如果我们将free()new一起使用,则可以释放内存。它只是析构函数不会被调用。离开行为就像悬挂指针一样。

我理解上面我们不应该将free()new一起使用,因为它可能会损坏堆。

但是我还希望在概念上可视化这种行为。

2 个答案:

答案 0 :(得分:8)

free分配的内存上使用new是未定义的行为。无法保证new返回malloc返回的地址。 (事实上​​,new[]通常不会。)

答案 1 :(得分:1)

根本不应该混合这些。 newdelete已配对mallocfree

请记住,new的行为可以由应用程序完全重新定义,并且可以使用与堆完全无关的分配策略。正因为如此,你不能依靠free能够对由new生成的指针做任何事情。他们是两个不同的世界。