- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
cc++笔试题——C++中newdelete概念和用法总结
学过C++的程序员都知道,new/delete是其管理内存的
主要方法。与C语言相比,C++支持面向对象技术,因此在内
存管理方面有所区别。
在C++中,数据对象(基本类型和复合类型)的创建包括两个
部分:一是给数据对象分配足够的内存,二是内存进行数据的初
始化。而C中,只有第一个分配内存的作用。并且,不仅仅是类,
其它基本类型,如int型等,也是如此。例如:
char*pc1=newchar;
char*pc2=newchar(A);
以上两条语句都能够给对应的指针分配内存,不同在于,第
一条语句仅仅分配内存,而具体的内容是随机的;而第二条
语句不仅分配内存,并且赋值为‘A’。相对应的,当不再需
要这些内存时候,可以采用delete来释放内存。
C++中,关于new/delete相关的内容很多,初学者比较容易
混淆概念。以下是笔者的一点总结,希望对那些还处于懵懵
懂懂的程序员有帮助。
1.new/delete关键字。C++和其它语言一样,也事先
预留了一些单词作为系统使用。程序员是不能用这些单词来
表示自己的数据的。如int
,float,struct,class
等。当然new/delete也是。但是new/delete关键字仅仅是在
词法上的定义,它只表明程序员不能重复定义它们,用来表
达其它含义。
2.new/delete表达式。指的是new/delete与其它单词所
组成的一条有具体词义的语句(运算符形式)。如newchar;
就是分配大小为一个byte的内存空间。在C++中,new/delete
表达式在不同的情况下,有不同的实现途径。但是实现的功
能都是一样的,就是处理内存相关操作。
3.operatornew和operatordelete
函数。这点很奇怪,在C++中,某些运算符号可以重载为函
数来使用(尽管运算本身就是一种抽象的对数据处理的函数
方式),因此operatornew和
operatordelete是两个函数名称。但是这两种函数只是,分配
内存而不初始化。这点与C语言的malloc和free比较类似。
4.类成员函数new/delete。指的是类的成员函数,并且
函数名是new和delete。这与3.中的函数有点类似,只是
3.
中的函数是标准空间中的函数,而类成员函数是类本身的成
员函数。
接下来,是这4条之间的关系。1.只是说明
new/delete两个单词程序员不能再定义使用,与具体的功能
毫无关系。2.是一条与实际条件相关的,具有内存分配功能
的表达式。
3.4是函数名,只是作用的空间大小不一样。简单说来就是:
单词,表达式,函数名和函数名。
当C++编译器碰到new/delete表达式的时候,它会去
寻找相关的内存处理方式。
如果表达式的对象并没有定义自己的成员new函数,那么它
就会去调用全局的new函数去分配
文档评论(0)