-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