c++中delete和析构函数的关系

C++语言 码拜 9年前 (2016-06-09) 1741次浏览
都说
delete=释放内存+调用析构。
释放内存:释放堆上申请的内存。
调用析构函数,再释放创建对象时产生的临时变量,。
是这样么?本人感觉本人的理解有严重问题。
望高手指点
解决方案

20

不确切,或说不对。
针对于 delete object的情况,需要分两种情况来讨论:
1、形如:class *object=new class()创建的对象,调用delete,则是先调用析构函数链(本人在类对象中申请的内存要本人释放),假如没有异常产生,则释放object占用的栈上的内存块
2、开如:class *object=new(address) class()创建的对象,即使执行了delete object;语句,也不会调用class的析构函数,(更详细的信息本人搜索一下“定位new操作符”)

20

引用:

不确切,或说不对。
针对于 delete object的情况,需要分两种情况来讨论:
1、形如:class *object=new class()创建的对象,调用delete,则是先调用析构函数链(本人在类对象中申请的内存要本人释放),假如没有异常产生,则释放object占用的栈上的内存块
2、开如:class *object=new(address) class()创建的对象,即使执行了delete object;语句,也不会调用class的析构函数,(更详细的信息本人搜索一下“定位new操作符”)

2) 只能人肉调用 析构好吧,  delete 照样是析构 + free,  会crash ..


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c++中delete和析构函数的关系
喜欢 (0)
[1034331897@qq.com]
分享 (0)