【发布时间】:2015-04-10 05:11:55
【问题描述】:
如果我编写一个名为 Test 的 class 并编写一个 Test type show() 函数,例如
#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
然后输出显示 Test obj 和 return tt 的析构函数,但没有为它们创建构造函数,但通常我们知道首先会创建构造函数并在完成任务后析构函数将被调用,但为什么在传递和返回任何对象时异常?
【问题讨论】:
-
在“测试 tt;”中将调用 Test 的默认构造函数(如果存在),但由于您不提供 Test 的代码,因此无法回答。另外,请注意,根本没有使用 obj,因此编译器不妨将其优化掉。
-
完整编写代码并显示您正在打印的位置。
-
@DanielDaranas,你能告诉我为什么构造函数没有被调用 Test obj 并返回 tt。
-
@RazibHossainShuvo。不,我拒绝分析这样的代码。对不起,但这没有任何意义。
标签: c++ constructor destructor