新闻中心

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


相关推荐: 在FastAPI中利用lifespan与依赖注入高效管理Redis连接池  C++如何生成随机数_C++ random库使用方法与范围设置  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址  C++如何实现单例模式_C++设计模式之线程安全的单例写法  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】  CSS布局中意外空白:解决padding-top导致的顶部间距问题  mc.js免安装版 mc.js一键畅玩入口  qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程  Lar*el递归关系中排除子孙节点的策略  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  深入理解Google Cloud Datastore查询:祖先路径与数据一致性  顺丰快件物流信息 官方网站查询入口  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源  Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  Kafka Streams中基于消息头条件过滤消息的实现指南  从J*aScript对象中精确提取指定属性的教程  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  cad如何更改注释性对象的比例_cad注释性比例调整方法  “在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法  Composer如何解决json扩展缺失的错误  如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置  如何使 Jest 模拟函数默认抛出错误以提高测试效率  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  msn官网入口地址手机版 msn官方网站手机最新链接  J*aScript数组对象转换:按指定键分组与值收集  LINUX怎么设置定时任务_LINUX crontab配置教程  响应式容器内容自动缩放与宽高比维持教程  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  J*aScript DOM操作:高效清空列表元素的策略与实践  Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口  Golang如何实现简单的Web表单_Golang表单提交与验证处理方法  UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  Python:递归比较文件夹内容并找出特定类型文件的差异  163邮箱注册官网 免费申请163个人邮箱  J*aScript教程:根据元素文本内容动态设置背景色  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  知音漫客官网漫画下载_知音漫客网页版阅读记录  解决macOS Tkinter应用双击启动崩溃:PyInstaller打包指南  自定义Bag-of-Words实现:处理带负号的词汇权重  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色  夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案  谷歌浏览器怎么给标签页静音_Chrome标签静音快捷操作  Angular Material 垂直步进器:实现底部到顶部排序的教程  抖音从哪里进入网页版_抖音官方入口链接 

搜索