C++ 基础 - delete 和 delete []
看到一些代码,使用 new [] 创建并分配内存了数组,且并未使用 delete [] ,而是使用 delete 进行释放该数组。所以回顾一下 delete 和 delete [] 的区别。
使用 delete 释放 new [] 创建并分配内存的数组,该操作先释放数组的内存,并调用数组第一个对象的析构函数。对于基础类型(如:int)的数组来说,并没有额外的资源需要在析构函数中释放,所以即便未调用数组后续对象的析构函数,也不会出现内存泄漏的问题。
但是对于一些自定义对象的数组来说,有时这些对象需要在析构函数中释放额外的资源,那么使用 delete 就会造成除数组第一个对象正确释放外,其余对象未能正确释放的问题了。
结论就是,还是规范编程吧。
示例:
#include <iostream>
int main()
{
int length = 10000;
for (int i = 0; i < length; i++) {
int* tmp = new int[10];
delete tmp;
std::cout << i << "\n";
}
}
结果: