用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

上一篇: Confusing with delete and free function in C++

下一篇: When to use Malloc instead of New