正确使用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 ptr = std::make_unique(42);
// 自动释放,无需手动 delete
• 数组也可用智能指针:
std::unique_ptr arr = std::make_unique(10);
arr[0] = 1; // 使用方式与普通指针类似
// 越界不会检查,但析构时自动 delete[]
基本上就这些。虽然 new 和 delete 是 C++ 基础,但在现代 C++ 中,应优先使用智能指针和容器(如 vector)来避免手动内存管理带来的风险。
以上就是C++中如何手动分配内存 new和delete操作符使用规范的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1471984.html
微信扫一扫
支付宝扫一扫