第十三章堆与拷贝构造函数.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十三章堆与拷贝构造函数

An Introduction to Database Systenm 第十三章 堆与拷贝构造函数 13.1 关于堆 13.2 需要new和delete的原因 13.3 分配堆对象 13.4 拷贝构造函数 13.5 默认拷贝构造函数 13.1 关于堆 C++程序的内存格局分为四个区: 全局数据区(data area);代码区(code area); 栈区(stack area);堆区(即自由存储区heap area) 全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区,余下的空间都被作为堆区。 13.1 关于堆(续) 注意: (1)操作堆内存时,如果分配了内存,就要回收它,否则运行程序时会造成内存泄漏。 (2)频繁地分配和释放不同大小的堆空间,会产生堆内碎块。 第十三章 堆与拷贝构造函数 13.1 关于堆 13.2 需要new和delete的原因 13.3 分配堆对象 13.4 拷贝构造函数 13.5 默认拷贝构造函数 13.2 需要new和delete的原因 malloc()函数的缺点:分配空间时不能调用构造函数。 类对象的建立:是分配空间、构造结构以及初始化的三位一体,同一由构造函数完成。 用new代替malloc()是必然的。 第十三章 堆与拷贝构造函数 13.1 关于堆 13.2 需要new和delete的原因 13.3 分配堆对象 13.4 拷贝构造函数 13.5 默认拷贝构造函数 13.3 分配堆对象 1.分配堆对象 例: void fn() { Tdate *pS; pS= new Tdate; //分配堆空间并构造它 //… delete pS; //先析构,释放堆空间 } 13.3 分配堆对象(续1) 注意: (1)不必显式指出从new返回的指针类型,因为new知道要分配对象的类型是Tdate。而且new还知道对象的类型,因为它要籍此调用构造函数。 (2)堆对象的作用域是整个程序生命期,所以除非程序运行完毕,否则堆对象作用域不会到期。堆对象析构是在释放堆对象语句delete执行之时。 13.3 分配堆对象(续2) 2.new后面的类类型 例:ps=new Tdate(1,1,1998); 说明:new是根据参数匹配的原则调用构造函数的,去调用构造函数Tdate(int,int,int)。 13.3 分配堆对象(续3) 3.从堆中分配对象数组 例: class Student {public: Student(char * pName=”no name”) { strncpy(name,pName,sizeof(name)); name[sizeof(name)-1]=’\0’; } protected: char name[40]; } 13.3 分配堆对象(续4) 例: 续 void fn(int noOfObjects) { Student * pS=new Student[10]; //对象数组 //… delete[]pS; } 13.3 分配堆对象(续5) 注意:从堆上分配对象数组,只能调用默认的构造函数,不能调用其他任何构造函数。 缺点:一般来说,堆空间相对其他内存空间比较空闲,随要随拿,给程序运行带来了较大的自由度。使用堆空间往往由于: (1)直到运行时才能知道需要多少对象空间; (2)不知道对象的生存期到底有多长; (3)直到运行时才知道需要多少内存空间。 第十三章 堆与拷贝构造函数 13.1 关于堆 13.2 需要new和delete的原因 13.3 分配堆对象 13.4 拷贝构造函数 13.5 默认拷贝构造函数 13.4 拷贝构造函数 1.为什么用拷贝构造函数? (1)用一个对象去构造另一个对象(用另一个对象值初始化一个新构造的对象); (2)对象作为参数传递,需要对象的拷贝; (3)对象的类型多种多样,不像基本数据类型这么简单,可以直接赋值(资源归属权不清)。 13.4 拷贝构造函数(续1) 2.拷贝构造函数 格式: 类名( 类名 变量名){ … } 注意:拷贝构造函数的参数是对象 13.4 拷贝构造函数(续2) 3.拷贝构造函数的用法 例://ch14_1.cpp #includeiostream.h #includestring.h class Student { public: Student(char *pName=”no name”,int ssid=0) { id=ssid; strcpy(name,pNa

文档评论(0)

ldj215323 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档