在 C++ 中, 和 都是用来释放动态分配的内存的操作符,但它们的使用场景和底层行为有着严格的区别。 核心的区别可以用一句话概括: 用于释放单个对象的内存,而 用于释放对象数组的内存。 下面是详细的区别和原理解析: 1. 匹配规则 如果你用 分配内存,必须用 释放。 如果你用 分配内存,必须用 释放。 2. 底层执行过程的区别 当释放自定义类(带有析构函数)的对象时,它们的区别最为明显: 的执行过程: 1. 调用 所指单个对象的析构函数。 2. 调用 释放该对象所占用的内存。 的执行过程: 1. 获取数组的长度(编译器通常会在分配数组内存时,在指针前面的隐藏区域存放一个记录数组大小的“Cookie”)。 2. 按逆序对数组中的每一个对象调用析构函数。 3. 调用 释放整个数组占用的内存块。 代码示例: 3. 错误混用会引发什么后果?(极度危险) 这是 C++ 中最容易引发崩溃和内存泄漏的错误之一,属于 未定义行为 (Undefined Behavior, UB)。 错误情况 A: 搭配 后果: 编译器只会调用 的析构函数,剩下 9 个对象的析构函数不会被调用。如果这些对象内部动态...