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 次没调用 → 资源泄漏new用delete[]→ 未定义行为 → 崩溃、脏内存
基础类型(int、char 等)通常不会立刻崩,但规则上依然错误,严禁混用。
4. 一句话背诵版
new 配 delete,调用一次析构;
new [] 配 delete [],调用多次析构;
混用会导致析构不完整、内存泄漏或崩溃。

浙公网安备 33010602011771号