用C ++中的删除和自由功能混淆
可能重复:
new / delete和malloc / free有什么区别?
class Foo
{
public:
Foo() { x = new int; }
~Foo() { delete x; }
private:
int *x;
};
Foo *p = new Foo[10];
free ( p );
我对上面的代码感到困惑。 这有什么问题吗?
当你为一个分配了new
的对象调用free()
,它的析构函数没有被调用,所以在这个例子中你会得到内存泄漏。 另外,在这个例子中,你必须使用delete[]
因为内存被分配了new[]
。
是的,存在一个巨大的问题:任何类型的任何人都可以重写new
(和delete
),并且可能会或可能不会使用malloc
作为底层分配器(实际上,它可能不会)。 同时,C ++ 03标准的§20.4.6/ 4说:
函数free()
不会试图通过调用::operator delete()
来释放存储空间。
意思是,任何new
调用都可以以任何方式分配内存,但free()
很可能不会正确释放内存。
如果您使用new分配对象,则必须使用delete将其重新分配。 free()释放malloc等分配的内存块。
链接地址: http://www.djcxy.com/p/13769.html