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

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[] 对应使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值