我正在閱讀複製構造函數以及它們通常將參數作爲常量引用接收的方式。 Why should the copy constructor accept its parameter by reference in C++? 我寫了一段代碼片段來測試,當按值接收參數時,是否創建副本(如提供的鏈接的接受答案中所述)。 但是,當按值接收對象時,我看不到構造函數。 請解釋爲什麼?並且不是通過值返回對象時創建的副本?再也沒有構造函數在那裏調用。爲什麼?爲什麼構造函數在值傳遞時沒有被調用
class Vector
{
public:
Vector(){cout << "Vector constructor"<<endl;}
~Vector(){cout << "Vector destructor"<<endl;}
};
Vector use(Vector z)
{
cout << "At call" << endl;
Vector v;
cout << "after definition" << endl;
return v;
}
int main()
{
Vector t;
cout << "After irrelevant" << endl;
use(t);
cout << "After use"<< endl;
}
的輸出如下:
Vector constructor
After irrelevant
At call
Vector constructor
after definition
Vector destructor
Vector destructor
After use
Vector destructor
UPDATE1:我已經錯過了最初的例子添加拷貝構造函數。一旦完成,代碼將按預期行事。
你沒有拷貝構造函數。內置的不會打印任何東西;) –
複製構造函數在通過值傳遞時調用,而不是正常的構造函數。 – owacoder
我的不好,在同一個程序中有很多其他代碼..模擬它:)將添加並再次測試 –