-4
當一個類對象通過值傳遞給任何函數時,會調用複製構造函數來創建一個本地對象,並在返回對象時調用析構函數。 但是,如果通過對象引用將複製構造函數被調用?通過引用傳遞對象時是否調用複製構造函數?
當一個類對象通過值傳遞給任何函數時,會調用複製構造函數來創建一個本地對象,並在返回對象時調用析構函數。 但是,如果通過對象引用將複製構造函數被調用?通過引用傳遞對象時是否調用複製構造函數?
不,不會被調用。
引用是別名,即另一個名稱已存在的變量而不是副本。
看看這個例子:
class Line {
public:
int getLength(void){}
// simple constructor
Line(){
cout<<"constructor"<<endl;
}
// copy constructor
Line(const Line &obj){
cout<<"copy cts\n";
}
};
void callR(Line& l){
cout<<"call by ref\n";
}
void callC(Line l){
cout<<"call by copy\n";
}
int main() {
Line line;
cout<<"before call by reference\n";
callR(line);
cout<<"before call by copy\n";
callC(line);
}
產生以下輸出:
constructor -> Line line;
before call by reference
call by ref
before call by copy
copy cts
call by copy
正如你可以看到,當一個對象被引用傳遞拷貝構造函數沒有被調用。將參考看作指針。
你試過了嗎?發生了什麼? – DimChtz
請創建一個[mcve]並解釋你看到了什麼樣的行爲以及你的期望 – UnholySheep
通過引用傳遞不會導致複製,因此不應該調用copy-constructor。 –