如题,在下列代码中,输出的结果不会出现destructor,请问这是为什么?

#include <iostream>

using namespace std;

class A
{
public:
A();
A(const A&);
~A();
void operator = (const A&);
};
A::A() {cout<<"default constructor called\n";}
A::A(const A&){cout<<"copy constructor called\n";}
A::~A(){cout<<"destructor called\n";}
void A::operator = (const A&right_side){cout<<"assignment operator called\n";}

A foo( A& anObj)
{
cout<<"inside foo\n";
return anObj;
}

int main()
{
A thing;
A another = foo(thing);

system("pause");
return 0;
}
如果将foo 去掉&。变成
A foo( A anObj)
{
cout<<"inside foo\n";
return anObj;
}

慕的地10843
浏览 52回答 3
3回答

千巷猫影

析构函数是在对象销毁的时候被系统调用的。另外,你这里说反了,如果去掉foo里面去掉&,就会多生成一个临时变量,foo结束后,这个对象会被析构,这时候就会多输入一个destructor。如果是原来的A foo(A& anObj)这里的参数是引用,则不会创建一个对象,也就没有所谓析构。所以引用不会多一个destructor其实main里面里面也有定义两个A对象,在退出main的时候,也会被调用的,你在命令行里运行程序可以看到,程序结束后会有两个destructor输出:default&nbsp;constructor&nbsp;calledinside&nbsp;foocopy&nbsp;constructor&nbsp;calleddestructor&nbsp;called&nbsp;//&nbsp;main函数里的A析构destructor&nbsp;called&nbsp;//&nbsp;main函数里的A析构Press&nbsp;any&nbsp;key&nbsp;to&nbsp;continue这是我在VC中运行的结果。

森栏

在该类生成的对象实例声明周期结束时,才被调用析构函数,在定义类时,进行声明、定义,主要用来释放申请的资源,如定义了指针变量,并对其进行空间分配( new XX ),就可以在析构函数中释放资源。举例入下class A{Class B pt ;A(){pt = new B();}~A(){if( NULL != pt){delete pt ;pt = NULL;}}}// end of class A

拉丁的传说

因为析构的时候你已经退出了,自然就显示不出来了,一般在new之后用delete可以看到结果
打开App,查看更多内容
随时随地看视频慕课网APP