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

来源:互联网 发布:美的网络市场调查报告 编辑:程序博客网 时间:2024/06/01 10:25

C++中的delete和delete[]的区别(笔记)

最近在准备校招,这里做一些面试或笔试遇到的问题的笔记,加深记忆的同时也预防下次出现容易找到答案

这一次谈一下delete 和delete[]的区别

在C++ primer (中文第五版,p425)中指出:

  • delete p 是直接删除指针所指向的内存空间,回收new 分配的单个对象的内存空间, p必须指向一个动态分配的对象或为空;
  • delete[] pa 则是先计算pa所对应空间有多少个变量或对象,然后全部释放或调用相应的析构函数(数组元素是按逆序销毁),pa必须指向一个动态分配的数组或为空;

同时,书中指出若delete 一个指向数组的指针时忽略了[] (或 对一个单一对象用了delete []) ,该行为为未定义的,但编译器可能不会给出警告。
具体用代码实验下:

new[] 搭配 delete使用

using namespace std;class T {public:  T() { cout << "constructor" << endl; }     // 构造函数  ~T() { cout << "destructor" << endl; }    // 析构函数};int main(){  const int NUM = 3;  T* pa = new T[NUM];  cout << pa << endl;  delete pa;  // delete[] pa;}

上述为new一个长度为3的数组,但只delete一次,结果如下:
delete一个长度为3的数组,只调用一次析构函数

new[] 搭配 delete[]使用

正确应该为:

所以:new 和 delete、new[] 和 delete[] 对应使用。

原创粉丝点击