当前位置: 首页 > 工具软件 > delete > 使用案例 >

delete 和 delete[]

彭硕
2023-12-01

delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用operator delete来释放内存。delete与new配套,delete []与new []配套。
看如下代码:

MemTest *mTest1=new MemTest[10];
MemTest *mTest2=new MemTest;
Int *pInt1=new int [10];
Int *pInt2=new int;
delete[]pInt1; //   1
delete[]pInt2; //   2
delete[]mTest1; //   3
delete[]mTest2; //   4

代码会在注释4处报错。这就说明:对于内建简单数据类型,delete和delete[]功能是相同的。对于自定义的复杂数据类型,delete和delete[]不能互用。delete[]删除一个数组,delete删除一个指针。简单来说,用new分配的内存用delete删除;用new[]分配的内存用delete[]删除。delete[]会调用数组元素的析构函数。内部数据类型没有析构函数,所以问题不大。如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。

推荐一个更详细的博客:https://blog.csdn.net/snow_rain_1314/article/details/79916059

 类似资料: