132.delete和delete[]区别?

132.delete和delete[]区别?

delete 用于释放单个对象;delete [] 用于释放数组对象,必须配对使用。

1. 最根本区别

  • delete

    调用 1 次析构函数,然后释放内存

    对应:new

  • delete[]

    调用 N 次析构函数(数组每个元素一次),然后释放内存

    对应:new[]

2. 代码示例

// 单个对象
A* p1 = new A;
delete p1;    // 正确

// 数组
A* p2 = new A[10];
delete[] p2;  // 正确(调用10次析构)

3. 混用会怎样?

  • new[]delete只调用 1 次析构,剩下 9 次没调用 → 资源泄漏
  • newdelete[]未定义行为 → 崩溃、脏内存

基础类型(int、char 等)通常不会立刻崩,但规则上依然错误,严禁混用。

4. 一句话背诵版

new 配 delete,调用一次析构;

new [] 配 delete [],调用多次析构;

混用会导致析构不完整、内存泄漏或崩溃。

posted @ 2023-08-02 21:41  CodeMagicianT  阅读(47)  评论(0)    收藏  举报