← eetop.cn_Perl语言入门(第四版小骆驼书)

推荐答案 测试一下

4.2 delete函数 ................................ ................................ ................................ .......…

问答题 中等 经典问答问答题

参考答案

在C++中,`delete` 函数用于释放由 `new` 动态分配的单个对象的内存,并调用该对象的析构函数。核心考点包括: 1. **`delete` 与 `delete[]` 的区别**:`delete` 释放单个对象,`delete[]` 释放对象数组。若误用(如用 `delete` 释放 `new[]` 分配的内存),会导致未定义行为,通常表现为内存泄漏或程序崩溃。 2. **析构函数的调用**:`delete` 操作会先调用对象的析构函数,再释放内存。若指针为 `nullptr`,则 `delete` 是安全的,不执行任何操作。 3. **双重释放(Double Free)**:对同一指针多次调用 `delete` 会导致未定义行为。通常需在 `delete` 后将指针置为 `nullptr` 以避免。 4. **内存泄漏**:忘记 `delete` 动态分配的内存会导致资源无法回收,尤其在长期运行的程序中危害严重。使用智能指针(如 `std::unique_ptr`、`std::shared_ptr`)可自动管理生命周期。 5. **自由存储区与堆的差异**:虽然大多数实现中自由存储区就是堆,但标准并未强制规定,`new`/`delete` 的实现可能使用不同的内存池,因此不应混用 `malloc`/`free` 与 `new`/`delete`。 易错点: - 混淆 `delete` 和 `delete[]`,造成内存损坏。 - 在构造函数中 `new` 内存,但析构函数中未对应 `delete`。 - 在 `delete` 后未置空指针,导致后续误用悬空指针。 - 在异常处理中未释放内存,应使用 RAII 机制。

涉及知识点

  • delete与delete[]的区别
  • 析构函数的调用时机
  • 双重释放与悬空指针
  • 内存泄漏及预防
  • 自由存储区与堆的关系
← 上一题
登录后反馈错题
下一题 →