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只是使数组清空,而不是清除这块内存