版权声明:heibao111728 https://blog.csdn.net/heibao111728/article/details/84952023
对于delete与delete的区别,教课书上告诉我们:
delete : 用来释放new分配的单个对象指针指向的内存,
delete[] : 用来释放new分配的对象数组指针指向的内存。
其实实际情况是这样吗?我们使用new申请一个int或者char等标准数据类型的数组,然后使用两种方法释放一下内存看看结果,我们可以发现两种方式的效果是相同的。既然效果是相同的那为什么会有delete[]出现呢?原因是教课书上描述的不全,两种释放空间的方法得加一个前提,这个前提是:不是标准数据类型,得是我们自己定义的数据类型,如类等。具体参见如下代码。
/**
* difference of delete and delete[]
*/
#include <iostream>
using namespace std;
class A
{
private:
int m_data;
public:
A() { }
~A() { cout << "delete object." << endl; }
};
int main()
{
A *a = new A[10];
//delete []a;
delete a;
return 0;
}
上述代码中,如果我们使用 "delete a" 来释放申请的空间,运行时会发生异常,
如果使用 "delete []" 释放已申请的空间,则可以正常运行,且调用10次析构函数。