第7章━━动态内存分配.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章━━动态内存分配

主要内容 C++的四个内存区域 动态存储分配 堆内存 new 与 delete 运算符 动态存储分配的几点说明 使用 new 和 delete 的几点说明 动态创建对象 对象的浅拷贝、浅赋值 对象的深拷贝、深赋值 顺序表类模板的定义 C++的四个内存区域 C++的四个内存区域: ①代码区━━存放程序代码。 ②静态数据区━━存放全局变量或对象、static局部变量或对象。全局变量或对象在程序开始运行时在该区分配; static局部变量或对象在程序运行过程中第一次进入其作用域时在该区分配。该区的变量或对象直到程序运行结束才被释放。 ③局部数据区(栈区) ━━存放auto局部变量或对象 。 auto局部变量或对象在程序运行到其作用域时在栈区分配,但怎样分配在编译时就已经确定。auto局部变量或对象在离开其作用域时即被释放。 ④动态存储区(自由存储区、堆区) ━━存放程序运行过程中由 new 运算符动态创建的变量或对象 。动态创建的变量或对象在编译时无法为其预定存储空间,系统根据运行时的具体要求在该区分配。该区的变量或对象需要使用 delete 运算符才能将其释放。 动态存储分配 静态存储分配: 通常程序中定义的变量或对象,编译器在编译时就可根据该变量或对象的类型知道其所需内存空间的大小,即怎样分配在编译时就已经能够确定,从而在适当的时候为它们分配确定的内存空间,这种内存分配称为静态存储分配。 动态存储分配: 有些变量或对象只有在程序运行过程中才能确定其大小,这样编译器在编译时就无法为它们预定内存空间,只能在程序运行过程中,系统根据运行时的具体要求进行内存分配,称为动态存储分配。动态存储分配是在自由存储区(堆区)中进行。 堆内存 关于堆内存: 堆区是由操作系统直接管理的内存区域,它是“公共的区域”,而且“面积”比较大,它的“生命周期”也不是由编译系统控制的,而是由编程的人控制的。在许多的应用中,堆内存的使用都是必不可少的。必须通过指针,才可以使用堆内存。 堆内存的分配与释放: 在程序运行过程中,遇到一个需要动态分配的变量或对象时,必须向系统申请取得堆内存中的一块所需大小的内存空间,用于存放该变量或对象。当不再使用该变量或对象时,必须结束它的生命期,需要显式释放其所占用的内存空间。C++中,取得和释放堆内存中的空间,分别通过 new 和 delete 运算符来完成。new 用来动态分配内存空间, delete 用来将动态分配得到的内存空间归还给系统(释放)。 new 与 delete 运算符 new 运算符━━动态申请堆空间 格式1: 指针变量 = new 类型名 ; 格式2: 指针变量 = new 类型名 ( 初始值 ) ; 功能:动态创建一个指定类型的变量或对象。若创建成功(堆空间申请成功),new 运算返回新分配堆空间的首地址;若创建失败(堆空间申请失败), new 运算返回 0 或 NULL(空指针)。 delete 运算符━━动态释放堆空间 格式: delete 指针 ; 功能:释放由 new 运算动态创建的变量或对象。指针的值必须是 new 运算所分配堆空间的首地址,即 new 运算的返回值。 new 与 delete 运算符 new 运算符━━动态创建一维数组 格式: 指针变量 = new 类型名 [ 下标表达式 ] ; 功能:动态创建一个指定类型的一维数组,数组元素的个数为下标表达式的值。若创建成功(堆空间申请成功),new 运算返回新分配一维数组空间的首地址;若创建失败(堆空间申请失败), new 运算返回 0 或 NULL(空指针)。 注意:动态为数组分配堆空间时,不能同时进行初始化。 delete 运算符━━动态释放一维数组 格式: delete [ ] 指针 ; 功能:释放由 new 运算动态创建的一维数组。指针的值必须是 new 运算所分配一维数组空间的首地址,且前面必须加上一对方括号 “ [ ] ”。 注意:若 delete 中的方括号“ [ ] ”不写,只是释放一维数组中一个元素的空间。 【例】(动态创建变量) #includeiostream.h void main ( ) { int * p = new int ( 100 ) ; cout *p endl ; *p = 200 ; cout *p endl ; delete p ; } 【例

文档评论(0)

didala + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档