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 时一定要采用相同形式!
本文来自博客园,作者:想想就很离谱,转载请注明原文链接:https://www.cnblogs.com/lvvou/p/15251616.html