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

在C++中,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,否则会造成内存泄漏。
• 单个对象用 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; // 危险!悬空指针,未定义行为
直接使用 new/delete 容易在异常发生时导致资源泄漏。推荐使用智能指针代替手动管理。
• 使用 std::unique_ptr 自动管理:#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// 自动释放,无需手动 delete
• 数组也可用智能指针:
std::unique_ptr<int[]> arr = std::make_unique<int[]>(10);
arr[0] = 1; // 使用方式与普通指针类似
// 越界不会检查,但析构时自动 delete[]
基本上就这些。虽然 new 和 delete 是 C++ 基础,但在现代 C++ 中,应优先使用智能指针和容器(如 vector)来避免手动内存管理带来的风险。
以上就是C++中如何手动分配内存 new和delete操作符使用规范的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号