您的位置:首页 > 编程语言 > C语言/C++

C++ 析构函数与delete[]

2017-08-09 16:59 183 查看
delete 回收new为对象分配的内存;

析构函数不是删除对象,而是在删除前做一些清理工作,使该部分内存为新的对象使用。

最近碰到一个问题,使用clear()时直接使用:

void clear()
{
//.....
delete[]element;
//....
}
get(int theIndex) const
{
checkIndex(theIndex);//检测Index是否合理,否则抛出异常
return element[theIndex];
}


调用如下:

x.clear();
try
{
x.get(0);
}
catch (illegalParameterValue e)
{
e.outputMessage();
}


此刻抛出中断,因为访问了一个不存在的内存,其后改为

void clear()
{
//.....
for (int i = 0; i < listSize; i++)
element[i].~T();
//....
}


之后正常,究其原因是clear只是使数组清空,而不是清除这块内存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对象