C++ 析构函数与delete[]

来源:互联网 发布:阿芙护肤品怎么样知乎 编辑:程序博客网 时间:2024/06/04 18:23

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

原创粉丝点击