為什麼拷貝建構函式自己的引數必須是「引用型別」

2021-10-05 21:51:38 字數 592 閱讀 9945

書上解釋說:

如果其引數不是引用型別,則呼叫永遠也不會成功——

為了呼叫拷貝建構函式,我們必須拷貝它的實參,但為了拷貝實參,我們又需要呼叫拷貝建構函式,如此無限迴圈。

我就乙個狀態:???

這是在說啥???把我自己搞糊塗了,這到底是什麼意思???

分句來理解。

第一句:為了呼叫拷貝建構函式,我們必須拷貝它的實參。

這句話還是很容易理解的,因為不是引用型別,那麼拷貝建構函式中的形參,需要使用乙個實參的拷貝,也就是需要拷貝乙個實參。

第二句:但為了拷貝實參,我們又需要呼叫拷貝建構函式

但是拷貝建構函式需要是本型別的(也有可以發生型別轉換的,暫時不考慮),本型別的物件如果想要實現拷貝,就需要使用拷貝建構函式,也就代表著需要拷貝乙個實參的實參。

而如果想要拷貝乙個實參的實參,需要呼叫實參的實參的拷貝建構函式。。。

然後無限迴圈下去,就類似成為了乙個沒有出口的遞迴。

所以,記住一點,拷貝建構函式自己的引數必須是引用型別!!!

否則會造成呼叫的死迴圈。

拷貝建構函式的引數為什麼是引用

在c 中,建構函式,拷貝建構函式,析構函式和賦值函式 賦值運算子過載 是最基本不過的需要掌握的知識。但是如果我問你 拷貝建構函式的引數為什麼必須使用引用型別?這個問題,你會怎麼回答?或許你會回答為了減少一次記憶體拷貝?很慚愧的是,我的第一感覺也是這麼回答。不好還好,我有理性這個好品質。思索一下以後,...

拷貝建構函式的引數為什麼必須是引用?

1 include2 include 3using namespace std 4class foo5 13 foo foo f ss f.ss 1417 foo operator const foo f1 1822 void test foo f2 2326 27 28int main 29 如果...

拷貝建構函式的引數為什麼必須使用引用型別

在c 中,建構函式,拷貝建構函式,析構函式和賦值函式 賦值運算子過載 是最基本不過的需要掌握的知識。但是如果我問你 拷貝建構函式的引數為什麼必須使用引用型別?這個問題,你會怎麼回答?或許你會回答為了減少一次記憶體拷貝?很慚愧的是,我的第一感覺也是這麼回答。不好還好,我有理性這個好品質。思索一下以後,...