這幾個概念比較容易混淆,總結一下。
同默認構造函數一樣,當我們沒有定義復制構造函數時,編譯器會合成一個默認的復制構造函數。合成的復制構造函數只是滿足編譯器的需求,把新對象的每個成員變量初始化為原對象的副本,通常是大家所說的淺拷貝。一般來說合成的復制構造函數能滿足我們的需求,但是包含有指針的類一般情況下需要定義自己的復制構造函數。
關于深拷貝淺拷貝可參考:Memberwise copy(深拷貝)與Bitwise copy(淺拷貝)的區別
至于有指針的類為什么需要復制構造函數可參考:C++中的智能指針
有時候我們禁止對象的復制,這時只需要把復制構造函數聲明為PRivate。
新聞熱點
疑難解答