-9
如果我写像类命名测试,写试验类型显示()函数为什么要调用析构函数,但在将对象作为参数传递时不会调用构造?
#include <iostream>
using namespace std;
class Test{
public:
int x;
Test()
{
cout<<"Empty or Default Constructor"<<endl;
}
Test(int x)
{
cout<<"Valued constructor"<<endl;
}
~Test()
{
cout<<"Destructor"<<x<<endl;
}
Test show(Test obj)
{
Test tt;
tt.x=20;
return tt;
}
};
int main()
{
Test t1,t2(20);
t2.show(t2);
return 0;
}
输出:
Empty or Default Constructor
Valued constructor
Empty or Default Constructor
Destructor : 20
Destructor : 1988276941
Destructor : 1988276941
Destructor : 1972875622
然后输出显示测试OBJ的析构和return tt但是没有为它们创建构造函数,但通常我们知道fir stly构造函数将被创建,在完成任务析构函数后会被调用,但为什么在传递和返回任何对象时它是例外的?
在“Test tt;”中Test的默认构造函数将被调用(如果存在),但由于您未提供Test的代码,因此无法回答。另外,请注意,obj完全不用,所以编译器可能会优化它。 – 2015-02-10 08:31:00
完整编写代码并显示您正在打印的位置。 – 2015-02-10 08:33:05
@DanielDaranas,请问现在可以告诉我,为什么构造函数不是在调用Test obj并返回tt。 – 2015-02-10 09:31:04