正确使用new和delete需配对:new分配单个对象用delete释放,new[]分配数组用delete[]释放,避免内存泄漏和未定义行为;建议使用智能指针如std::unique_ptr实现自动内存管理,防止资源泄漏。

在C++中,new 和 delete 是用于动态分配和释放内存的操作符。正确使用它们对避免内存泄漏、悬空指针和程序崩溃至关重要。下面介绍其基本用法和使用规范。
new 和 delete 的基本用法
使用 new 可以在堆上分配内存,返回指向该内存的指针;使用 delete 释放由 new 分配的内存。
• 分配单个对象:int* p = new int; // 分配一个int
*p = 10;
立即学习“C++免费学习笔记(深入)”;
delete p; // 释放内存
• 分配对象数组:
int* arr = new int[5]; // 分配5个int的数组
arr[0] = 1;
delete[] arr; // 用 delete[] 释放数组
必须配对使用 new 和 delete
每使用一次 new,就必须对应一次 delete,否则会造成内存泄漏。
• 单个对象用 delete:Person* obj = new Person();
delete obj; // 正确
• 数组对象必须用 delete[]:
Person* arr = new Person[3];
delete[] arr; // 必须用 delete[],否则未定义行为
• 错误示例:
int* p = new int[10];
delete p; // 错误!应使用 delete[]
避免重复释放和空指针问题
释放已释放的内存会导致未定义行为。建议在 delete 后将指针置为 nullptr。
int* p = new int(5);
delete p;
p = nullptr; // 防止重复释放
if (p) delete p; // 安全判断
• 不要对同一个指针调用两次 delete:
int* q = new int;
delete q;
delete q; // 危险!悬空指针,未定义行为
异常安全与 RAII 建议
直接使用 new/delete 容易在异常发生时导致资源泄漏。推荐使用智能指针代替手动管理。
• 使用 std::unique_ptr 自动管理:#include
std::unique_ptr
// 自动释放,无需手动 delete
• 数组也可用智能指针:
std::unique_ptr
arr[0] = 1; // 使用方式与普通指针类似
// 越界不会检查,但析构时自动 delete[]
基本上就这些。虽然 new 和 delete 是 C++ 基础,但在现代 C++ 中,应优先使用智能指针和容器(如 vector)来避免手动内存管理带来的风险。










