Kai*_*ain 4 c++ destructor heap-memory dynamic-memory-allocation
我有一个没有析构函数和构造函数的类,如下所示:
class Foo {
public:
Foo(int a) : p(new int(a)) {}
private:
int *p;
};
Run Code Online (Sandbox Code Playgroud)
{
Foo a(4);
}
Run Code Online (Sandbox Code Playgroud)
这段代码之后,堆上分配的内存会被释放吗?或者我是否必须显式提供这样的析构函数:
class Foo {
public:
Foo(int a) : p(new int(a)) {}
~Foo();
private:
int *p;
};
Foo::~Foo() {
delete p;
}
Run Code Online (Sandbox Code Playgroud)
我们在堆上分配的任何内存都new 必须始终使用关键字释放delete。
因此,您必须像在析构函数中一样使用关键字显式释放堆上分配的内存。合成的析构函数不会为你做这件事。newdelete
请注意,如果您不想自己处理内存管理,那么您可以使用智能指针。这样您就不必delete自己显式使用,因为与智能指针对应的析构函数将负责释放内存。这本质上意味着如果指定的数据成员p是智能指针而不是普通(内置)指针,那么您不必delete p在类的析构函数中编写Foo。