在C++中,`delete` 和 `delete[]` 是两个非常重要的操作符,用于释放之前通过 `new` 或 `new[]` 分配的内存。它们之间的主要区别在于它们各自适用的内存分配类型。
1. **`delete`**:
- 当你使用 `new` 操作符为一个单一对象分配内存时,你应该使用 `delete` 来释放这块内存。
- `delete` 负责调用对象的析构函数(如果对象有析构函数的话),然后释放对象所占用的内存。
- 例如:`int* p = new int(10);` 分配了一个整数,随后应使用 `delete p;` 来释放它。
2. **`delete[]`**:
- 当你使用 `new[]` 操作符为对象数组分配内存时,你应该使用 `delete[]` 来释放这块内存。
- `delete[]` 会遍历数组中的每个对象,调用它们的析构函数(如果对象有析构函数的话),然后释放整个数组所占用的内存。
- 例如:`int* arr = new int[10];` 分配了一个整数数组,随后应使用 `delete[] arr;` 来释放它。
**重要区别**:
- 使用 `delete` 释放通过 `new[]` 分配的内存,或者反过来,都会导致未定义行为。这通常意味着程序可能会崩溃、数据损坏或表现出其他不可预测的行为。
- `delete[]` 确保数组中的每个对象都被适当地析构,这是 `delete` 所不具备的。
**总结**:
- 使用 `delete` 释放单个对象的内存。
- 使用 `delete[]` 释放对象数组的内存。
- 始终匹配你的 `new`/`new[]` 调用与相应的 `delete`/`delete[]` 调用,以避免内存泄漏或未定义行为。