c++析构函数是怎么释放内存的?山东

 我来答
adsl7xdvxdck
2011-01-20 · 超过34用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:0
展开全部
关于析构函数的说明:
1。当程序的执行离开实例化自动对象所在的作用域时,自动对象就会撤销,这时析构函数隐式调用.并不是说在main函数结束时才执行。
2。析构函数本身并不释放对象占用的内存空间,它只是在系统收回对象的内存空间之前执行扫尾工作.析构函数体内并不一定要有delete语句。可以有也可以没
3。和构造函数一样,每个类都有一个析构函数,即使没有显式提供一个析构函数,编译器也会生成一个空的析构函数 .
补充说明:
离开实例化自动对象所在的作用域这句的意思就是说比如你有一个自定义类和一个自定义函数,你在这个函数里声明一个这个类的对象,这个对象就是实例化自动对象,它的作用域仅限于该函数体内,然后你在main函数里调用这个函数,调用结束后,那个类的对象就离开了它的作用域,这时,那个类的析构函数就会被编译器隐式调用。
当主函数结束,回收内存的工作就开始了,但这个工作是由编译器的内存回收机制在后台执行。如果在类的实现中,有动态分配内存和动态分配数组的语句,那么最好在析构函数里提供delete语句!
更正二楼的一个观点,析构函数绝不是在main函数结束时自动执行的!!!!!!
百度网友5ba75e4
2011-01-20 · TA获得超过2045个赞
知道大有可为答主
回答量:1775
采纳率:60%
帮助的人:975万
展开全部
楼上的不知道从哪里复制过来的一段。。。。
析构函数名同类名,区别在于析构函数前有"~"符号,功能于构造函数相反
一个对象在他的寿命结束时,系统将会自动调用析构函数将他释放掉,从而实现内存的释放,被释放的对象不可再使用
举个小例子:
假设我已经定义了一个Date1的类,其实有Date1的构造函数和析构函数,在main中我创建有2个对象d1和d2(先创建d1再创建d2)。在退出主程序前,d1,d2结束了他们的寿命,系统调用析构函数释放内存,先释放d2再释放 d1顺序于创建相反
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式