書上解釋說:
如果其引數不是引用型別,則呼叫永遠也不會成功——
為了呼叫拷貝建構函式,我們必須拷貝它的實參,但為了拷貝實參,我們又需要呼叫拷貝建構函式,如此無限迴圈。
我就乙個狀態:???
這是在說啥???把我自己搞糊塗了,這到底是什麼意思???
分句來理解。
第一句:為了呼叫拷貝建構函式,我們必須拷貝它的實參。
這句話還是很容易理解的,因為不是引用型別,那麼拷貝建構函式中的形參,需要使用乙個實參的拷貝,也就是需要拷貝乙個實參。
第二句:但為了拷貝實參,我們又需要呼叫拷貝建構函式
但是拷貝建構函式需要是本型別的(也有可以發生型別轉換的,暫時不考慮),本型別的物件如果想要實現拷貝,就需要使用拷貝建構函式,也就代表著需要拷貝乙個實參的實參。
而如果想要拷貝乙個實參的實參,需要呼叫實參的實參的拷貝建構函式。。。
然後無限迴圈下去,就類似成為了乙個沒有出口的遞迴。
所以,記住一點,拷貝建構函式自己的引數必須是引用型別!!!
否則會造成呼叫的死迴圈。
拷貝建構函式的引數為什麼是引用
在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 中,建構函式,拷貝建構函式,析構函式和賦值函式 賦值運算子過載 是最基本不過的需要掌握的知識。但是如果我問你 拷貝建構函式的引數為什麼必須使用引用型別?這個問題,你會怎麼回答?或許你會回答為了減少一次記憶體拷貝?很慚愧的是,我的第一感覺也是這麼回答。不好還好,我有理性這個好品質。思索一下以後,...