C 拷貝建構函式在什麼時候被呼叫?

2021-07-16 07:19:28 字數 587 閱讀 1639

1

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

person p(q);

//此時複製建構函式被用來建立例項p

person p = q; //

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

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

f(p);

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

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

p = q; //

此時沒有複製建構函式的呼叫!

簡單來記的話就是,如果物件在宣告的同時將另乙個已存在的物件賦給它,就會呼叫複製建構函式;如果物件已經存在,然後將另乙個已存在的物件賦給它,呼叫的就是賦值運算子(過載)

預設的複製建構函式和賦值運算子進行的都是

"shallow copy

",只是簡單地複製字段,因此如果物件中含有動態分配的記憶體,就需要我們自己重寫複製建構函式或者過載賦值運算子來實現"

deep copy

",確保資料的完整性和安全性。

C 複製建構函式在什麼時候被呼叫?

person p q 此時複製建構函式被用來建立例項p person p q 此時複製建構函式被用來在定義例項p時初始化pf p 此時p作為函式的引數進行值傳遞,p入棧時會呼叫複製建構函式建立乙個區域性物件,與函式內的區域性變數具有相同的作用域需要注意的是,賦值並不會呼叫複製建構函式,賦值只是賦值運...

C 複製建構函式在什麼時候被呼叫?

1 物件在建立時使用其他的物件初始化 person p q 此時複製建構函式被用來建立例項p person p q 此時複製建構函式被用來在定義例項p時初始化p 2 物件作為函式的引數進行值傳遞時 f p 此時p作為函式的引數進行值傳遞,p入棧時會呼叫複製建構函式建立乙個區域性物件,與函式內的區域性...

什麼時候呼叫拷貝建構函式

以下幾種情況會呼叫拷貝建構函式 1.以乙個物件初始化另乙個物件 2.函式以某個物件為引數 3.函式返回某個物件 4.初始化序列式容器的元素 2.void test2 另外以下程式 points i pointsarray1.points i 這一行並不會觸發 拷貝建構函式。呼叫的是 賦值運算子。賦值...