Mno*_*492 0 c++ free destructor delete-operator
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)
我对上面的代码感到困惑.它有什么问题吗?
是的,有一个很大的问题:(new
和delete
)可以被任何类型的任何人覆盖,并且可能会或可能不会malloc
用作底层分配器(实际上,它可能不会).同时,C++ 03标准的§20.4.6/ 4说:
该函数
free()
不会尝试通过调用来释放存储空间::operator delete()
.
意思是,任何new
调用都可以以任何方式分配内存,但free()
很可能不会正确地释放它.