【发布时间】:2014-02-11 01:18:15
【问题描述】:
这是潜在的内存泄漏,对吗?如果构造函数抛出,arr 不会被释放,对吧?我已经读过在这种情况下不会调用析构函数,但是 badType 的任何子对象都会被调用,但是我认为数组不会在这里,因为它是一个原始指针,对吗?
class badType
{
private:
int* arr;
int myLen, myNum;
public:
badType(int myLen, int aNum)
{
this->myLen = myLen;
arr = new int[myLen];
if (aNum < 100)
throw exception{ "Da number is too low" };
myNum = aNum;
}
~badType()
{
delete[] arr;
}
};
【问题讨论】:
-
好问题,我想我在这里找到了一个回答你问题的副本:stackoverflow.com/questions/147572/…
-
在这种特殊情况下,您可以在分配
arr之前测试aNum < 100。 -
为什么不将
cout<<"destructor called\n";弹出到析构函数中? -
另一个可能的答案here。
-
@svenoaks 而且,您分配的金额
myLen,不是mylen。不要命名差异如此之小的东西!
标签: c++