2014-09-04 282 views
-1

我正在學習類構造函數。爲什麼在調用複製構造函數之前調用構造函數?

正如你可以在這個網站上看到:http://www.tutorialspoint.com/cplusplus/cpp_copy_constructor.htm

在站點第一示例代碼,

Normal constructor allocating ptr 
Copy constructor allocating ptr. 
Length of line : 10 
Freeing memory! 
Freeing memory! 

我理解爲什麼拷貝構造函數是正常的構造後調用的困難。

我認爲沒有理由複製構造函數被調用。 以下兩條代碼行是否有所不同?

Line line(10); or 
Line line = Line(10); 

或函數'display'調用複製構造函數?

+1

請寫下您的文章,以便人們不必遵循鏈接來回答您的問題。 – godel9 2014-09-04 03:32:17

+0

什麼@ godel9說的是,在你的文章中,你應該包括相關的代碼,輸入,預期的產出,實際的產出,表明你有問題了解代碼,等等。 – 2014-09-04 04:07:59

回答

2

複製構造正在從

display(line); 

哪裏顯示功能走線對象的副本,因爲它的參數調用。如果將顯示功能的定義更改爲

void display(Line& obj); 

複製構造函數將被避免。

1

是的,這兩條線是不同的。

Line line(10);創建line,將10傳遞給構造函數。

Line line = Line(10)第一個是Line(10)它通過將10傳遞給臨時對象的構造函數來創建臨時對象;然後通過將該臨時對象傳遞給複製構造函數來創建line。臨時對象然後被銷燬。

臨時對象應該被優化掉(這叫做copy elision)。某些編譯器不能在調試模式下執行復制刪除,或者如果您通過開關禁用複製刪除。

相關問題