C++ 中 delete 和 delete[ ] 的区别

前言

先上结论:

·成对使用 new 和 delete 时要采用相同形式

1.在 new 表达式中使用 [],  那么在 delete 中也要使用 []

2.在 new 表达式中没有使用 [], 那么在 delete 中不要使用 []

例如:


  string* a1 = new string;
  string* a2 = net string[20];

  delete a1;
  delete[] a2;

代码演示

以下是代码原型

#include <iostream>
using namespace std;

// A类
class A
{
public:
	A(){ cout << "构造函数" << endl; }
	~A() { cout << "析构函数" << endl; }
};

// 主函数
int main(int argc, char** argv)
{


	return 0; 
}

---测试情景1:

#include <iostream>
using namespace std;

// A类
class A
{
public:
	A(){ cout << "构造函数" << endl; }
	~A() { cout << "析构函数" << endl; }
};

// 主函数
int main(int argc, char** argv)
{
	A* a1 = new A;
	A* a2 = new A[5];

	cout << "---------- 我是分割线 ----------" << endl;

	delete a1;
	delete[] a2;

	return 0; 
}

调试结果,可以看到 new 内存都全部析构了。

---测试情景2:

// 主函数
int main(int argc, char** argv)
{
	A* a1 = new A;
	A* a2 = new A[5];

	cout << "---------- 我是分割线 ----------" << endl;

	delete a1;
	delete a2;

	return 0; 
}

调试结果,可以看到不能完全析构,部分编译器能友好给出提示了

---测试情景3:

// 主函数
int main(int argc, char** argv)
{
	A* a1 = new A;
	A* a2 = new A[5];

	cout << "---------- 我是分割线 ----------" << endl;

	delete[] a1;
	delete[] a2;

	return 0; 
}

调试结果,可以看到一直异常在析构。

结论

成对使用 new 和 delete 时一定要采用相同形式!

成对使用 new 和 delete 时一定要采用相同形式!

成对使用 new 和 delete 时一定要采用相同形式!

posted @ 2021-09-10 15:46  想想就很离谱  阅读(171)  评论(0编辑  收藏  举报