2017-07-28 95 views
-4

當一個類對象通過值傳遞給任何函數時,會調用複製構造函數來創建一個本地對象,並在返回對象時調用析構函數。 但是,如果通過對象引用將複製構造函數被調用?通過引用傳遞對象時是否調用複製構造函數?

+1

你試過了嗎?發生了什麼? – DimChtz

+4

請創建一個[mcve]並解釋你看到了什麼樣的行爲以及你的期望 – UnholySheep

+1

通過引用傳遞不會導致複製,因此不應該調用copy-constructor。 –

回答

1

不,不會被調用。

引用是別名,即另一個名稱已存在的變量而不是副本。

看看這個例子:

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 

正如你可以看到,當一個對象被引用傳遞拷貝構造函數沒有被調用。將參考看作指針。

相關問題