首页 > 其他 > 详细

内存管理——newdelete expression

时间:2019-12-16 12:54:55      阅读:137      评论:0      收藏:0      [点我收藏+]

C++申请释放内存的方法与详情表

技术分享图片

 

 

 调用情况

技术分享图片

 

 

1.new expression

new表达式在申请内存过程中都发生了什么?

技术分享图片

 

 

 编译器将new这个分解为下面的主要3步代码,①首先调用operator new函数去申请内存,②然后再将指向内存的指针类型转换,③最后调用构造函数对这片内存进行初始化。

operator new函数不会抛出异常,它在申请内存时会循环调用malloc,如果申请不到内存,它会调用用户自己设定好的_canllnewh去清理内存,然后再次循环以保证可以申请到内存。

2.delete expression

我们知道,在C++中delete会调用析构函数,然后将内存释放掉,调用到最底层还是通过free来释放内存,delete可以直接调用析构函数。

技术分享图片

 

 

 这里用myString和标准库的string来测试一下是否可以直接调用构造和析构函数。

技术分享图片

 

 

 在myString的析构函数里加了一句打印,发现确实可以调用析构函数,string的对象应该也可以,但是它在析构过程中没有将指针置空,所以导致了它在析构以后仍然可以访问这段内存中的数据。

再试试构造函数是否可以直接调用

技术分享图片

 

 

 报错,显然不可以

 

 

 

 

内存管理——newdelete expression

原文:https://www.cnblogs.com/area-h-p/p/12048172.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!