C++中new与deleted关键字如何使用


今天小编给大家分享一下C++中new与deleted关键字如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。内核:存放操作系统栈区:函数的形参,非静态的局部变量,函数现场 保护数据等等,栈是向下增长的。共享库的内存映射区域:用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信。堆区:用于程序运行时动态内存分配,堆是可以上增长的。数据:存储全局数据和静态数据,分为.bss和.data 。代码:可执行的程序(机器指令)和常量数据。这里的new的用法是当作运算符的用法,该用法一共有四个步骤:计算类型申请一个空间(因为new的底层是malloc)将所取得的空间初始化将申请到的地址返回new当作函数用法使用免费云主机域名的是时候,类似malloc,都是申请一个空间,区别在于,返回值不同;当空间不足时malloc会返回一个“nullptr”,operator new会返回一个throw_bad的异常。当我们加入一个nothrow后:这样申请错误后,我们返回的是空指针。对于malloc我们不可以进行初始化,new也不可以初始化。所以当new作为函数时就相当于malloc。定位new用法与构造new十分相似,是在已经确定的空间当中,构造一个对象,并将该对象放置到声明的空间当中。不需要开辟相应的空间 合法空间即可 给出某个地址 即可根据要求进行相应操作。new创建对象特点:new创建对象需要指针接收,一处初始化,多处使用。new创建对象使用完需delete销毁。new创建对象直接使用堆空间,而局部不用new定义对象则使用栈空间。new对象指针用途广泛,比如作为函数返回值、函数参数等。频繁调用场合并不适合new,就像new申请和释放内存一样。new创建对象例子:pTest用来接收对象指针。不用new,直接使用类定义申明:此种创建方式,使用完后不需要手动释放,该类析构函数会自动执行。而new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏。但使用普通方式创建的类对象,在创建之初就已经分配了内存空间。这类指针,如果未经过对象初始化,则不需要delete释放。delete运算符使用的一般格式为 delete [ ]指针变量例如要撤销上面用new开辟的空间用:如果我们用“new char[10];”开辟的字符数组空间,把new返回的指针赋给了指针变量pt,则应该用以下形式的delete运算符撤销该空间:一般来说delete与new需要配对使用。new/delete是C++中的运算符。malloc / free是函数。malloc申请内存空间时,手动计算所需大小,new只需类型名,自动计算大小;malloc申请的内存空间不会初始化,new可以初始化;malloc的返回值为void*,接收时必须强转,new不需要;malloc申请内存空间失败时,返回的是NULL,使用时必须判空;new申请内存空间失败时返回异常动态分配失败,则返回一个空指针(NULL),表示发生了异常,堆资源不足,分配失败。指针删除与堆空间释放。删除一个指针p(delete p;)实际意思是删除了p所指的目标(变量或对象等),释放了它所占的堆空间,而不是删除p本身(指针p本身并没有撤销,它自己仍然存在,该指针所占内存空间并未释放),释放堆空间后,p成了空指针。内存泄漏(memory leak)和重复释放。new与delete 是配对使用的, delete只能释放堆空间。如果new返回的指针值丢失,则所分配的堆空间无法回收,称内存泄漏,同一空间重复释放也是危险的,因为该空间可能已另分配,所以必须妥善保存new返回的指针,以保证不发生内存泄漏,也必须保证不会重复释放堆内存空间。动态分配的变量或对象的生命期。我们也称堆空间为自由空间(free store),但必须记住释放该对象所占堆空间,并只能释放一次,在函数内建立,而在函数外释放,往往会出错。要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问。用new和delete可以动态开辟和撤销地址空间。在编程序时,若用完一个变量(一般是暂时存储的数据),下次需要再用,但却又想省去重新初始化的功夫,可以在每次开始使用时开辟一个空间,在用完后撤销它。以上就是“C++中new与deleted关键字如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: Matlab怎么实现动态表白图的绘制

这篇文章主要介绍了Matlab怎么实现动态表白图的绘制的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Matlab怎么实现动态表白免费云主机域名图的绘制文章都会有所收获,下面我们一起来看看吧。这里没上传视频图,放最后一张成品:漂亮的…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/06 10:55
下一篇 05/06 10:55

相关推荐