C++析构函数何时会被调用?

首先定义了一个类叫做A,然后有一个函数Afunc(){Atmp;returnA;}在main里面有两句话:一个是func();另外一个是Aget=func();在A的构造... 首先定义了一个类叫做A,然后有一个函数
A func()
{
A tmp;

return A;

}
在main里面有两句话:
一个是
func();
另外一个是
A get = func();
在A的构造和析构函数中已经写好了相应的调试信息,发现只写func(),A会在func执行完毕后析构,而A get = func();执行完毕后对象A不会析构,而是等到整个main执行完毕后再析构,请问这是为什么?接受和不接受func()的返回值有这么大的区别吗?
展开
 我来答
0016676565
2015-03-21 · TA获得超过100个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:83.6万
展开全部
析构函数执行时机:1.当程序栈内对象被删除时
2.手动调用析构函数时

要更详细的理解机制,请尝试:
#include <iostream>
using namespace std;
class Temp {
public :
Temp() { cout << "An object Temp build." << endl; }
~Temp() { cout << "An object Temp delete." << endl; }
Temp(Temp &A) { cout << "Copy from an object!Method 1!" << endl; }
void operator=(Temp &A) { cout << "Copy from an object!Method 2!" << endl; }
};
Temp test_a() {Temp test; return test; }

int main() {
Temp A;
Temp B = A;
Temp C(A);

Temp D = test_a();
return 0; }

程序运行结果因编译器而异,可能的结果如下:
An object Temp build. // A

An object Temp build. // B

Copy from an object!Method 2! // B=A

Copy from an object!Method 1! // C(A)

An object Temp build. // D

An object Temp build. // temp

Copy from an object!Method 2! // D=temp

An object Temp delete. // temp

An object Temp delete. // D

An object Temp delete. // C

An object Temp delete. // B
An object Temp delete. // A
shaojiangood
2015-12-26 · 知道合伙人教育行家
shaojiangood
知道合伙人教育行家
采纳数:7284 获赞数:161759
工学硕士,从事机械行业,擅长英语,爱好历史。

向TA提问 私信TA
展开全部
析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千锋教育
2016-07-15 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
c++中的每个类都会有一个析构函数,当这个类的对象被销毁的时候,对象会自动调用析构函数。
跟据对象的声明方式分两种情况来讲:
1、动态声明的对象
这种声明方式下系统会自动销毁不再使用的对象,对应的对象的析构函数也会被调用。例如classname object;这样声明的对象,当程序运行到了对象作用域之外或者程序退出,对象都会被销毁,当然析构函数也会被调用。
2、静态声明的对象(new等)
这种声明方式下系统不会主动销毁对象,对应的析构函数也不会被主动调用,除非程序显式地调用delete等函数。这种情况下只要不去delete,对象的析构函数永远不会调用,即便这个对象的内存空间已经泄露或者程序退出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式