问个小白问题,当析构函数被显示调用以后,会发生什么?
当析构函数被显示调用以后,会发生什么?类的实例(对象)是否还存在?类中用new分配的内存是否delete——假设显式调用的析构函数中没有delete?自己调用析构函数,与...
当析构函数被显示调用以后,会发生什么?
类的实例(对象)是否还存在?
类中用new分配的内存是否delete——假设显式调用的析构函数中没有delete?
自己调用析构函数,与程序自动调用析构函数有什么区别?
显式调用析构函数只是清除对象本身, 并没有释放对象所占的内存。
——这是什么意思啊?难道对象所占的内存,和用new申请的内存不同吗? 展开
类的实例(对象)是否还存在?
类中用new分配的内存是否delete——假设显式调用的析构函数中没有delete?
自己调用析构函数,与程序自动调用析构函数有什么区别?
显式调用析构函数只是清除对象本身, 并没有释放对象所占的内存。
——这是什么意思啊?难道对象所占的内存,和用new申请的内存不同吗? 展开
展开全部
你好
我试着来回答你的问题,有异议我们再讨论
(1)构造函数首先是不能被显示调用的,它是在程序运行中,当你创建对象时由系统自动调用的,很显然他和一般的成员函数是不一样的,首先函数名和类一样,其次它没有返回值,为什么没有返回值这正是因为它由系统调用,是没有程序能够接收它的返回值的,而上面和其他的成员函数不同的两点,正是编译器能够识别它是构造函数,而其他不是的原因
(2)析构函数和构造函数一样同样不能被程序显示的调用,它是在对象生存期结束的时候由系统自动调用的,而调用这个函数是为了释放分配给对象的内存空间,至于编译器为什么能识别原因同构造函数
(3)总结一下:即构造函数和析构函数是不能被显示调用的,既然都不能显示的调用,所以也就无法谈论你说的区别了 ,如果硬要说区别,那就是如果你用new构建了一个对象,那你就要在析构函数中自己加上delete,注意delete是释放动态分配的内存空间,而没加delete的析构函数,它回收的只是在栈上分配的对象内存,也即是静态分配的对象内存
好了,祝你好运
我试着来回答你的问题,有异议我们再讨论
(1)构造函数首先是不能被显示调用的,它是在程序运行中,当你创建对象时由系统自动调用的,很显然他和一般的成员函数是不一样的,首先函数名和类一样,其次它没有返回值,为什么没有返回值这正是因为它由系统调用,是没有程序能够接收它的返回值的,而上面和其他的成员函数不同的两点,正是编译器能够识别它是构造函数,而其他不是的原因
(2)析构函数和构造函数一样同样不能被程序显示的调用,它是在对象生存期结束的时候由系统自动调用的,而调用这个函数是为了释放分配给对象的内存空间,至于编译器为什么能识别原因同构造函数
(3)总结一下:即构造函数和析构函数是不能被显示调用的,既然都不能显示的调用,所以也就无法谈论你说的区别了 ,如果硬要说区别,那就是如果你用new构建了一个对象,那你就要在析构函数中自己加上delete,注意delete是释放动态分配的内存空间,而没加delete的析构函数,它回收的只是在栈上分配的对象内存,也即是静态分配的对象内存
好了,祝你好运
展开全部
显式调用析构函数只是清除对象本身, 并没有释放对象所占的内存。
而用new申请的内存,使用delete释放,默认的析构函数不会释放该内存。
如果在构造函数中有用new申请的内存, 那么在析构函数中就要用delete释放,
否则会发生内存泄漏。
程序自动调用析构函数,除了清除了对象本身,还释放了对象所占的内存。
而用new申请的内存,使用delete释放,默认的析构函数不会释放该内存。
如果在构造函数中有用new申请的内存, 那么在析构函数中就要用delete释放,
否则会发生内存泄漏。
程序自动调用析构函数,除了清除了对象本身,还释放了对象所占的内存。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
显示调用构造函数和析构函数就想调用一般的函数一样,并不意味着创建或销毁对象。但是注意,如果构造函数中动态分配了空间,则显示调用构造函数会出现内存泄露;如果析构函数中释放动态分配的空间,则会出现多次释放统一内存,会出现严重错误。
参考:http://blog.csdn.net/piratejk/article/details/4693316
http://blog.csdn.net/piratejk/article/details/4693316
参考:http://blog.csdn.net/piratejk/article/details/4693316
http://blog.csdn.net/piratejk/article/details/4693316
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在 main() 函数返回 前, 你用 new 申请的内存空间 是不会被释放的, 所以如果 你在 析构函数 里面 用 Delete 指针变量, 那么这样才会释放 new申请的内存空间.
同时执行析构函数后 将会释放因为 这个类的对象 所占用的内存资源
同时执行析构函数后 将会释放因为 这个类的对象 所占用的内存资源
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有区别
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主你谦虚了 这还小白 表吓我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询