当前位置: 首页 > news >正文

【C++】零基础入门 · 第 9 节:动态内存管理(new 与 delete)

在第 8 节中,我们学习了指针的基本概念——如何声明指针、取地址、解引用。指针的强大之处不仅在于它能指向已有的变量,更在于它能让我们在程序运行时动态申请内存。本节将介绍newdelete这对运算符,带你掌握 C++ 中动态内存管理的核心技能。

1. 栈内存与堆内存

在 C++ 程序中,内存主要分为几个区域,其中最常接触的是栈(Stack)堆(Heap)

1.1 栈内存

栈内存由编译器自动管理。当你声明一个局部变量时,它就被分配在栈上;当变量离开作用域时,栈内存自动释放。

voidfoo(){intx=10;// x 分配在栈上intarr[5]={};// arr 也分配在栈上}// 离开函数,x 和 arr 自动释放

栈内存的特点是:分配和释放速度极快,但空间有限(通常只有几 MB),且大小必须在编译时确定。

1.2 堆内存

堆内存由程序员手动管理,空间更大,适合存放那些大小不确定或需要长期存活的数据。

voidfoo(){int*p=newint(42);// 在堆上分配一个 int// ... 使用 *p ...deletep;// 手动释放}

堆内存的特点是:空间较大,分配速度相对较慢,且必须由程序员手动释放,否则会造成内存泄漏。

对比项栈内存堆内存
管理方式编译器自动程序员手动
分配速度较慢
空间大小较小(通常几 MB)较大(取决于系统)
大小确定时机编译时运行时
是否需要手动释放

2. new 运算符

new运算符用于在堆上分配内存,并返回指向该内存的指针。

2.1 分配单个变量

int*p=newint(42);// 在堆上分配一个 int,初始值为 42double*q=newdouble;// 在堆上分配一个 double,未初始化

new int(42)会做两件事:在堆上申请一块足够存放int的内存,然后将这块内存的值初始化为42,最后返回其地址。如果不提供初始值(如new double),内存中的值是未定义的。

2.2 分配数组

int*arr=newint[10];// 在堆上分配 10 个 int 的数组double*darr=newdouble[n];// n 可以是运行时才确定的变量

new int[10]会在堆上连续分配 10 个int大小的空间,并返回首元素的指针。注意方括号[]不能省略。数组长度可以是变量——这是

http://www.zskr.cn/news/1417267.html

相关文章:

  • CAXA 样式管理
  • 2026年 东莞防水袋厂家推荐排行榜:手机/相机/PVC/TPU/沙滩防水袋品牌优选与高防护耐用 - 品牌企业推荐师(官方)
  • 意图共鸣科技《认知智能白皮书》——认知架构(CA):把“价值观”写进独立模块的工程推演
  • ATtiny13A驱动LED模拟火焰:超低功耗复古油灯改造全流程
  • 从0到日均10万请求:某金融客户DeepSeek+阿里云ACK集群灰度上线全过程(含自动扩缩容策略与SLA保障机制)
  • 科目三方法论--单点突破法
  • 基于Arduino的声控房间自动化系统与POV状态显示器制作指南
  • 保姆级避坑指南:在Ubuntu 18.04上搞定LeGO-LOAM与KITTI数据集(含话题不匹配、编译失败等常见问题解决)
  • 应对负面人际干扰的理性策略
  • C# WinForm 数据库增删改查 超级完整版
  • 164、运动控制中的测试:带宽与稳定性分析
  • 图解人工智能(40)人工智能应用-AI美颜
  • 基于Arduino与红外遥控的智能语音鱼改造:嵌入式系统综合实践
  • MKS RPS AX7657-85 故障分析与可能解决方案
  • 别再乱改grub了!保姆级教程:用tuned在CentOS 7/8上优雅隔离CPU核心(附实时性调优配置)
  • 基于RP2040的硬件定义与软件定义CPU融合设计实践
  • 2026年国产多参数水质分析仪十大品牌深度排名:技术实力、行业渗透率与服务能力全景解析 - 液体流量液位品牌推荐
  • windows上的codex安装后无法使用应用内的浏览器
  • 监控局域网的软件有哪些?实用PC端大盘点!企业都在用
  • 百度竞价代运营网络推广哪家强?2026年靠谱服务商排名与选型指南 - GEO优化
  • CAXA 尺寸驱动
  • 从0到63%:Gemini企业客户30日留存跃迁路径(含Prompt工程×会话记忆×状态持久化三重加固)
  • 2026权威实测:16款降AIGC软件横评,论文安全过关就靠它!
  • 硬件工程师别只懂技术,职场思维同样重要
  • 2026 排烟防火阀厂家推荐盘点:3C 全认证 + GB15930-2024合规 - 资讯快报
  • 基于Arduino与NRF24L01的厨房油烟机智能联动控制系统设计与实现
  • Arduino驱动MAX7219点阵屏:从SPI通信原理到动态显示实战
  • 2026国内全域线上推广头部服务商评测:从技术到转化的全方位对决 - GEO优化
  • 【TSP问题】基于遗传算法GA求解TSP问题附Matlab代码
  • 仅限首批200位架构师获取:Claude原生消息队列设计规范V2.1(含OpenTelemetry埋点模板+Schema Registry治理策略)