在C++中混淆了删除和自由功能

Mno*_*492 0 c++ free destructor delete-operator

可能重复:
new/delete和malloc/free有什么区别?

class Foo
   {
    public:
     Foo() { x =  new int; } 
     ~Foo() { delete x; }
    private:
        int *x;
   };

  Foo *p = new Foo[10];
  free ( p );
Run Code Online (Sandbox Code Playgroud)

我对上面的代码感到困惑.它有什么问题吗?

Mic*_*ael 10

当您调用free()分配的对象时new,不会调用其析构函数,因此在此示例中会出现内存泄漏.此外,在此示例中,您必须使用delete[]因为内存已分配new[].


ild*_*arn 5

是的,有一个很大的问题:(newdelete)可以被任何类型的任何人覆盖,并且可能会或可能不会malloc用作底层分配器(实际上,它可能不会).同时,C++ 03标准的§20.4.6/ 4说:

该函数free()不会尝试通过调用来释放存储空间::operator delete().

意思是,任何new调用都可以以任何方式分配内存,但free()很可能不会正确地释放它.