回覆列表
  • 1 # 使用者5299230923514

    1、物件在建立時使用其他的物件初始化

    Person p(q); //此時複製建構函式被用來建立例項p

    Person p = q; //此時複製建構函式被用來在定義例項p時初始化p

    2、物件作為函式的引數進行值傳遞時

    f(p); //此時p作為函式的引數進行值傳遞,p入棧時會呼叫複製建構函式建立一個區域性物件,與函式內的區域性變數具有相同的作用域

    需要注意的是,賦值並不會呼叫複製建構函式,賦值只是賦值運算子(過載)在起作用

    p = q; //此時沒有複製建構函式的呼叫!

    簡單來記的話就是,如果物件在宣告的同時將另一個已存在的物件賦給它,就會呼叫複製建構函式;如果物件已經存在,然後將另一個已存在的物件賦給它,呼叫的就是賦值運算子(過載)預設的複製建構函式和賦值運算子進行的都是"shallow copy",只是簡單地複製欄位,因此如果物件中含有動態分配的記憶體,就需要我們自己重寫複製建構函式或者過載賦值運算子來實現"deep copy",確保資料的完整性和安全性。

  • 中秋節和大豐收的關聯?
  • 金盃掛擋加油沒動力怎麼回事?