C++:拷貝構造函數在什麼時候被調用?

複製代碼
1、對象在創建時使用其他的對象初始化

Person p(q); //此時複製構造函數被用來創建實例p

Person p = q; //此時複製構造函數被用來在定義實例p時初始化p

2、對象作爲函數的參數進行值傳遞時

f(p); //此時p作爲函數的參數進行值傳遞,p入棧時會調用複製構造函數創建一個局部對象,與函數內的局部變量具有相同的作用域

需要注意的是,賦值並不會調用複製構造函數,賦值只是賦值運算符(重載)在起作用

p = q; //此時沒有複製構造函數的調用!

簡單來記的話就是,如果對象在聲明的同時將另一個已存在的對象賦給它,就會調用複製構造函數;如果對象已經存在,然後將另一個已存在的對象賦給它,調用的就是賦值運算符(重載)

默認的複製構造函數和賦值運算符進行的都是"shallow copy",只是簡單地複製字段,因此如果對象中含有動態分配的內存,就需要我們自己重寫複製構造函數或者重載賦值運算符來實現"deep copy",確保數據的完整性和安全性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章