问个小白问题,当析构函数被显示调用以后,会发生什么?

当析构函数被显示调用以后,会发生什么?类的实例(对象)是否还存在?类中用new分配的内存是否delete——假设显式调用的析构函数中没有delete?自己调用析构函数,与... 当析构函数被显示调用以后,会发生什么?
类的实例(对象)是否还存在?
类中用new分配的内存是否delete——假设显式调用的析构函数中没有delete?
自己调用析构函数,与程序自动调用析构函数有什么区别?
显式调用析构函数只是清除对象本身, 并没有释放对象所占的内存。
——这是什么意思啊?难道对象所占的内存,和用new申请的内存不同吗?
展开
 我来答
zhouxw2008
2008-08-27 · TA获得超过480个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:0
展开全部
你好

我试着来回答你的问题,有异议我们再讨论

(1)构造函数首先是不能被显示调用的,它是在程序运行中,当你创建对象时由系统自动调用的,很显然他和一般的成员函数是不一样的,首先函数名和类一样,其次它没有返回值,为什么没有返回值这正是因为它由系统调用,是没有程序能够接收它的返回值的,而上面和其他的成员函数不同的两点,正是编译器能够识别它是构造函数,而其他不是的原因

(2)析构函数和构造函数一样同样不能被程序显示的调用,它是在对象生存期结束的时候由系统自动调用的,而调用这个函数是为了释放分配给对象的内存空间,至于编译器为什么能识别原因同构造函数

(3)总结一下:即构造函数和析构函数是不能被显示调用的,既然都不能显示的调用,所以也就无法谈论你说的区别了 ,如果硬要说区别,那就是如果你用new构建了一个对象,那你就要在析构函数中自己加上delete,注意delete是释放动态分配的内存空间,而没加delete的析构函数,它回收的只是在栈上分配的对象内存,也即是静态分配的对象内存

好了,祝你好运
3137333
2008-08-27 · TA获得超过463个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:156万
展开全部
显式调用析构函数只是清除对象本身, 并没有释放对象所占的内存。
而用new申请的内存,使用delete释放,默认的析构函数不会释放该内存。
如果在构造函数中有用new申请的内存, 那么在析构函数中就要用delete释放,
否则会发生内存泄漏。
程序自动调用析构函数,除了清除了对象本身,还释放了对象所占的内存。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wadv1232
2012-07-22
知道答主
回答量:10
采纳率:0%
帮助的人:3.6万
展开全部
显示调用构造函数和析构函数就想调用一般的函数一样,并不意味着创建或销毁对象。但是注意,如果构造函数中动态分配了空间,则显示调用构造函数会出现内存泄露;如果析构函数中释放动态分配的空间,则会出现多次释放统一内存,会出现严重错误。

参考:http://blog.csdn.net/piratejk/article/details/4693316
http://blog.csdn.net/piratejk/article/details/4693316
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
8793890
2008-08-27 · 贡献了超过163个回答
知道答主
回答量:163
采纳率:0%
帮助的人:38.7万
展开全部
在 main() 函数返回 前, 你用 new 申请的内存空间 是不会被释放的, 所以如果 你在 析构函数 里面 用 Delete 指针变量, 那么这样才会释放 new申请的内存空间.

同时执行析构函数后 将会释放因为 这个类的对象 所占用的内存资源
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友acd2d0d
2008-08-27 · TA获得超过1488个赞
知道大有可为答主
回答量:1355
采纳率:100%
帮助的人:0
展开全部
没有区别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tcbxn
2008-08-27 · TA获得超过171个赞
知道答主
回答量:155
采纳率:0%
帮助的人:0
展开全部
楼主你谦虚了 这还小白 表吓我
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式