《堆与复制构造函数》PPT课件

《堆与复制构造函数》PPT课件

ID:36839162

大小:233.75 KB

页数:54页

时间:2019-05-10

《堆与复制构造函数》PPT课件_第1页
《堆与复制构造函数》PPT课件_第2页
《堆与复制构造函数》PPT课件_第3页
《堆与复制构造函数》PPT课件_第4页
《堆与复制构造函数》PPT课件_第5页
资源描述:

《《堆与复制构造函数》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《C++面向对象程序设计》教学内容第1章C++概述第2章类和对象第3章面向对象程序设计概述第4章进一步学习类和对象第5章堆与复制构造函数第6章继承性:派生类第7章运算符重载第8章虚函数和多态性第9章模板第10章类库和C++的标准模板库STL第11章输入输出流第12章异常处理第5章堆与复制构造函数5.1堆5.2需要new和delete的原因5.3默认的复制构造函数5.4自定义复制构造函数5.1堆Heap堆是按动态方式分配的内存区域。在程序中需要空间存放数据时,就申请动态内存单元,使用完毕后释放动态内

2、存单元。这种动态内存分配方式能够显著地提高内存的利用率。C++程序的内存布局Stack栈Heap堆Globaldata全局数据区程序代码区programcode代码区存放程序的代码(可执行指令);全局数据区存放全局变量、静态变量、常量。固定存储区域栈是存放程序中的所有动态局部变量、函数参数、函数返回值等信息的一块内存区域。在固定存储区域与堆栈之间的自由区域称为堆栈Stack栈的内存管理严格遵循后进先出(LIFO:Lastin,FirstOut)的顺序,即释放栈中对象所占内存时的顺序刚好与给这些对象

3、分配栈中内存时的顺序相反,这一点正是实现函数调用所需要的。从栈中分配内存效率特别高,对栈的充分利用是C/C++编译程序能产生优质高效代码的原因之一。动态内存分配堆的内存是以动态分配方式管理的。所谓动态分配的内存是在程序运行期间获得的。动态存储分配方式允许我们的程序可以在执行期间根据实际的需要存放的数据量来申请合适数量的内存单元。这种动态分配方式不但能够提高内存的利用率,而且对于链表和二叉树等动态数据结构特别有用。动态内存申请和释放用函数malloc()分配的动态内存必须用函数free()释放;用n

4、ew申请的动态内存必须用delete释放。因为在C++程序中,从堆中获取的内存单元不会被自动释放,因此必须使用函数free()或者用delete释放这种内存。如果从堆中获取的内存在使用完后没有被释放,这部分内存在程序结束之前会一直被占用,这种情况被称为“内存泄漏”。5.2需要new和delete的原因5.2.1需要new和delete的原因5.2.2在堆上创建对象5.2.1需要new和delete的原因对自定义的类类型,使用函数malloc()给对象分配动态空间时不能自动调用构造函数;使用函数fr

5、ee()释放对象所占用的动态空间时也不能调用析构函数。C++语言创建了new和delete两个运算符来满足面向对象的新特性,在C++语言程序中,我们应该使用new和delete来创建和销毁类的对象。5.2.2在堆上创建对象使用new运算符在堆上创建对象时能够自动调用构造函数进行初始化;使用delete运算符释放对象占用的动态内存时能够自动调用该对象的析构函数进行善后处理。【例5.1】在堆上创建对象#includeusingnamespacestd;classSquare{int

6、side;public:Square(intx){side=x;cout<<"Constructiong";}~Square(){cout<<"Destructiong";}voiddisplay(){cout<display();deleteps;//自动调用析构函数,然后释放堆内存return0;}该程序运行后的输出

7、结果如下:Constructiong10Destructiong【例5.2】传值调用例子classSquare{intside;public:Square(intx){side=x;cout<<"Constructiong";}~Square(){cout<<"Destructiong";}voiddisplay(){cout<

8、uares(10);f(s);//对象s以传值方式传送给临时对象obs.display();return0;}该程序运行后的输出结果如下:Constructiong10DestructiongDestructiong10对象的副本当一个对象被作为参数传递给函数时,同时也创建了该对象的副本这个副本将成为函数的参数。也就是说,创建了一个新的对象。当函数结束时,作为函数的实际参数的副本将被销毁。也就是说,一个对象被销毁了两个问题第一个问题:在创建对象的副本时是否调用了构造函数?第二个问题

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。