【发布时间】:2014-09-22 19:00:34
【问题描述】:
如果我在构造函数中使用 new 为指针分配一些内存,并且如果我在分配内存表单构造函数后抛出异常,内存将被回收还是内存泄漏?
class A
{
public:
A()
{
p = new int(4);
throw 1;
}
~A()
{
delete p;
}
private:
int *p;
};
【问题讨论】:
-
如果你这样做没有抛出异常,你认为会发生什么?你有一个
new没有一个delete- 无论如何都不好。 -
正如写的那样,这是一个等待中的内存泄漏不管是否抛出异常。为了解决您的问题,
std::vector<int> p;,然后是构造函数的初始化程序上的p(4)。然后扔你想要的。 Pointers should not own resources. -
好的,约瑟夫。我添加了析构函数
-
@kadina 析构函数无助于抛出异常。
-
@πάνταῥεῖ:是的。我知道。但是约瑟夫想添加析构函数:)
标签: c++