拷貝建構函式和深拷貝例子

2021-08-22 04:26:39 字數 822 閱讀 5621

1.拷貝建構函式也是乙個建構函式,用來構造物件,只有在物件定義時起作用,其第乙個引數是自身型別的引用,其他任何引數均帶有預設值.(如果第乙個引數不是引用型別,因為構造拷貝物件時必須呼叫拷貝建構函式,那麼連拷貝建構函式都必須呼叫拷貝建構函式,結果可想而知,呼叫永遠也不會成功)

2.如果我們沒有為乙個類定義乙個拷貝建構函式,編譯器會為我們定義乙個,稱之為:合成的拷貝建構函式,即使我們已經定義了其他建構函式,編譯器還是會為我們合成乙個拷貝建構函式。

3.拷貝建構函式定義了將乙個物件賦予另乙個同型別物件時的操作,即逐個拷貝(非static)資料成員,

4.呼叫拷貝建構函式的情況:

(1)用 = 定義乙個物件

(2)將乙個物件作為實參傳遞個乙個非引用型別的物件

(3)從乙個返回型別為非引用型別的函式返回乙個物件

(4)用花括號初始化乙個陣列中的元素或乙個聚合類中的成員

5.編譯器有時會繞過拷貝建構函式,以提高程式執行效率。

6.當類成員中有指標型別時,最好用深拷貝,下面這個程式即為例子(在存在指標成員函式的類中,拷貝建構函式如果是簡單拷貝指標的值則為淺拷貝,如果重新為該指標分配一塊等值的記憶體則為深拷貝):

#include using namespace std;

class cstr

cstr(const cstr& str)

~cstr()

};int main()

cst st;

*p = new cst(st);  //也會呼叫拷貝建構函式

system("pause");

return 0;

}

拷貝建構函式和深拷貝例子

1.拷貝建構函式也是乙個建構函式,用來構造物件,只有在物件定義時起作用,其第乙個引數是自身型別的引用,其他任何引數均帶有預設值.如果第乙個引數不是引用型別,因為構造拷貝物件時必須呼叫拷貝建構函式,那麼連拷貝建構函式都必須呼叫拷貝建構函式,結果可想而知,呼叫永遠也不會成功 2.如果我們沒有為乙個類定義...

拷貝建構函式淺拷貝深拷貝

1 函式的引數為類物件且引數採用值傳遞方式 2 將類物件做為函式的返回值。2.淺拷貝 所謂淺拷貝,指的是在物件複製時,只對物件中的資料成員進行簡單的賦值 預設拷貝建構函式執行的也是淺拷貝。大多情況下 淺拷貝 已經能很好地 工作了,但是一旦物件存在了動態成員,那麼淺拷貝就會出問題了,讓我們考慮如下一段...

拷貝建構函式,深拷貝,淺拷貝

深淺拷貝的區別 淺拷貝是將原始物件中的資料型字段拷貝到新物件中去,將引用型字段的 引用 複製到新物件中去,不把 引用的物件 複製進去,所以原始物件和新物件引用同一物件 新物件中的引用型字段發生變化會導致原始物件中的對應欄位也發生變化。line line const line obj 深拷貝是在引用方...