新闻中心

c++中new和delete的用法_C++动态内存分配与释放

2025-11-24
浏览次数:
返回列表
new用于动态分配内存,delete用于释放;new可创建单个对象或数组并返回指针,需配对使用以防内存泄漏。

c++中new和delete的用法_c++动态内存分配与释放

在C++中,newdelete是用于动态分配和释放内存的关键字。它们允许程序在运行时从堆(heap)上申请和归还内存空间,相比栈上的静态或自动变量更加灵活,尤其适用于对象生命周期不确定或数据大小在运行时才能确定的场景。

new的基本用法

使用new可以动态创建单个对象或对象数组,返回指向该类型对象的指针。

● 动态创建单个对象:

int* p = new int; // 分配一个int大小的内存
*p = 10; // 可以通过指针赋值
int* q = new int(25); // 分配并初始化为25

● 动态创建对象数组:

int* arr = new int[10]; // 分配可存储10个int的数组
for(int i = 0; i   arr[i] = i * 2;
}

● 类对象的动态创建:

class MyClass {
public:
  MyClass() { cout   ~MyClass() { cout };

MyClass* obj = new MyClass; // 调用构造函数
MyClass* objArray = new MyClass[5]; // 创建5个对象,每个都调用构造函数

delete的基本用法

使用delete释放由new分配的内存,防止内存泄漏。必须与new的使用方式匹配。

● 释放单个对象:

delete p; // 释放单个int
delete q;
delete obj; // 释放单个类对象,会调用析构函数

● 释放对象数组:

delete[] arr; // 必须使用delete[]来释放数组
delete[] objArray; // 同样会依次调用每个元素的析构函数

注意:如果对数组使用了 delete 而不是 delete[],行为是未定义的,可能导致程序崩溃或资源未正确释放。

常见错误与注意事项

使用 new 和 delete 时容易犯以下错误:

● 忘记释放内存:

导致内存泄漏,长时间运行的程序可能耗尽内存。

● 多次释放同一块内存:

美图云修 美图云修

商业级AI影像处理工具

美图云修 50 查看详情 美图云修

delete ptr;
delete ptr; // 错误!重复释放,未定义行为

● 使用已释放的指针:

delete ptr;
*ptr = 100; // 危险!访问已释放内存

● 混淆 delete 和 delete[]:

new[] 配 delete[],new 配 delete,不可混用。

● 将 delete 用于非 new 的内存:

int x;
int* p = &x;
delete p; // 错误!x 是栈变量,不能 delete

现代C++中的替代方案

虽然 new 和 delete 在底层控制上很有用,但现代C++更推荐使用智能指针和容器来管理内存,避免手动管理带来的风险。

● 使用 unique_ptr 管理独占资源:

#include
auto p = std::make_unique(42);
// 自动释放,无需手动 delete

● 使用 shared_ptr 实现共享所有权:

auto sp1 = std::make_shared();
auto sp2 = sp1; // 引用计数+1,离开作用域自动清理

● 使用 vector 替代动态数组:

std::vector vec(10); // 比 new int[10] 更安全、易用

基本上就这些。new 和 delete 是C++动态内存管理的基础,但应谨慎使用,优先考虑RAII和智能指针机制,让代码更安全、简洁。

以上就是c++++中new和delete的用法_C++动态内存分配与释放的详细内容,更多请关注其它相关文章!


# c++  # 美图  # 如何使用  # 调试器  # 如何实现  # 动态分配  # 多态  # 推荐使用  # 长时间  # 适用于  #   # 高端网站建设定制价钱  # 品牌营销推广jd  # 怎么查看关键词广告排名  # 休宁网站seo优化外包公司  # SEO实战篮球穿搭  # 怎样进行博客seo  # 重工业推广网站  # 营销推广找88效果好  # 栾城区网站推广策划公司  # 网站建设专业的公司  # 相关文章 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Pandas DataFrame:高效添加条件计算列  2025-2030年全球乘用车销量预测:新能源成增长主力  C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器  Pandas DataFrame 多条件优先级排序与排名  QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道  京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比  如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置  微信网页版扫码登录入口 微信网页版二维码登录入口  包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址  Yandex浏览器官方网页版入口 Yandex浏览器最新版官网  C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略  菜鸟取件码是什么怎么查 最全查询渠道汇总  深入理解J*a合成构造器:何时以及为何阻止其生成  Win11网速慢怎么解决 Win11网络设置优化解除限速  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  使用Pandas转换并合并DataFrame:多列映射至统一结构  在Pyomo中实现基于变量的条件约束:Big-M方法详解  基于动态规划的房屋花卉种植最小成本算法详解  一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化  Golang如何使用const iota_Go iota常量计数器讲解  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  AO3访问入口汇总 AO3网页版同人作品一键直达  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  照顾宝贝2小游戏免费秒玩入口  PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  J*aScript中针对特定容器内图片动画的实现教程  2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC  将HTML Canvas内容转换为可上传的图像文件(File对象)  QQ邮箱登录官网首页 腾讯QQ邮箱网页入口  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍  探索高级语言到原生C/C++的转译:挑战与内存管理策略  蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  Animex动漫社网入口地址 Animex动漫社网正版在线入口  C++如何实现异步操作_C++11使用std::future和std::async进行异步编程  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南  理解J*aScript Promise的微任务队列与执行顺序  Python自定义类排序:解决lambda键值访问TypeError的实践指南  如何更改在 Excel 中打开超链接时的默认浏览器  Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】  Go语言HTML解析:利用Goquery精准获取指定元素内容  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  如何将HTML表格多行数据保存到Google Sheet  sublime怎么设置启动时打开的窗口_sublime会话管理与热退出  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责 

搜索