C++ 筆記 關於拷貝構造函數的二三事

C++的拷貝構造函數爲什麼參數是const Test& s?

參考:https://blog.csdn.net/TanJiaLiang_/article/details/86691437

1.Test(Test s)爲什麼不行?

因爲我們拷貝構造函數的參數Test s調用的也是拷貝構造函數,所以這樣調用必然造成無窮無盡的遞歸調用,所以我們必須加引用&

2.爲什麼要加const?

拿對象作爲返回值會調用拷貝構造函數

Test show(void)

{ return Test(20); }

Test t = show();        //調用拷貝構造函數

首先我們得知道,返回一個局部變量是通過一個臨時的變量返回,對象也不例外,這裏也會產生一個臨時的對象,而這個臨時對象,具有常性,也就是const,不可被修改,賦值之後臨時對象也就消亡了,這個臨時對象,具有const常性,所以當我們把const加上,通過嚴格的參數匹配,編譯器才能找到我們的const Test& s版本的拷貝構造函數。

如何禁止拷貝構造函數

將該類的拷貝構造函數設置爲private,或者定義一個基類,將基類的拷貝構造函數設置爲private。

具體參考:

https://blog.csdn.net/maochengtao/article/details/8841727

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章