C++中復制構造函數在什么時候被調用?這個問題不是疑問了,查了一下國外網站,總結一下。假設Person是一個類,復制構造函數的調用會在以下幾種情況下發生:
1、對象在創建時使用其他的對象初始化
Person p(q); //此時復制構造函數被用來創建實例p
Person p = q; //此時復制構造函數被用來在定義實例p時初始化p
2、對象作為函數的參數進行值傳遞時
f(p); //此時p作為函數的參數進行值傳遞,p入棧時會調用復制構造函數創建一個局部對象,與函數內的局部變量具有相同的作用域
需要注意的是,賦值并不會調用復制構造函數,賦值只是賦值運算符(重載)在起作用
p = q; //此時沒有復制構造函數的調用!
簡單來記的話就是,如果對象在聲明的同時將另一個已存在的對象賦給它,就會調用復制構造函數;如果對象已經存在,然后將另一個已存在的對象賦給它,調用的就是賦值運算符(重載)
默認的復制構造函數和賦值運算符進行的都是"shallow copy",只是簡單地復制字段,因此如果對象中含有動態分配的內存,就需要我們自己重寫復制構造函數或者重載賦值運算符來實現"deep copy",確保數據的完整性和安全性。
下一篇 如何讓你像病毒一樣紅遍網絡