delete和delete[]都可以删除已经分配的内存,但是两者有所不同。
例如:
程序1
#include <iostream>
using namespace std;
int main()
{
char *str=new char[4];
delete [] str;//or use delete str;
return 0;
}
程序2
#include <iostream>
using namespace std;
int main()
{
char *str=new char[4];
delete str;//or use delete str;
return 0;
}
以上两个程序在编译、连接、运行都可以通过,但是程序2会造成内存泄漏。因为str数组名是指向该数组首个元素的一个指针,用来delete str,那么编译器就只会把str指向数组的第一个元素所占的内存释放,其余的空间都仍然被占用。而程序1使用delete[]就告诉编译器str是一个数组,要把整个数组已经分配的内存全部销毁、收回。
本文对比了C++中delete和delete[]操作符的功能差异。详细解释了如何正确地释放动态分配的数组内存,避免内存泄漏。并通过两个示例程序展示了不当使用可能导致的问题。

被折叠的 条评论
为什么被折叠?



