C 之 拷貝建構函式 即複製建構函式

2021-08-27 15:51:38 字數 943 閱讀 5833

主要探索淺拷貝和深拷貝:

拷貝建構函式是一種特殊的建構函式,函式的名稱必須和類名稱一致,它的唯一的乙個引數是本型別的乙個引用變數。

當出現類的等號賦值時,會呼叫拷貝函式

在未定義顯示拷貝建構函式的情況下,系統會呼叫預設的拷貝函式——即淺拷貝,它能夠完成成員的一一複製。當資料成員中沒有指標時,淺拷貝是可行的。

但當資料成員中有指標時,如果採用簡單的淺拷貝,則兩類中的兩個指標將指向同乙個位址,當物件快結束時,會呼叫兩次析構函式,而導致指標懸掛現象。

所以,這時,必須採用深拷貝。

深拷貝與淺拷貝的區別就在於深拷貝會在堆記憶體中另外申請空間來儲存資料,從而也就解決了指標懸掛的問題。

簡而言之,當資料成員中有指標時,必須要用深拷貝

示例一:沒有指標的淺拷貝:

#include using namespace std;

class cexample

/* cexample(cexample other)

*/ void set(int value)

void show()

/* //拷貝建構函式

cexample(const cexample & c)

} */

~cexample()

/* cexample(cexample other)

*/ void show()

//拷貝建構函式

拷貝建構函式(複製建構函式)

執行 物件a 物件b時,系統需要呼叫拷貝建構函式,如果程式設計師沒寫,則呼叫預設的拷貝建構函式。預設的拷貝建構函式利用淺拷貝方式,它的樣子是 a const a a 淺拷貝 拷貝的時候,兩個指標指向同乙個區域 char str1 helloworld char str2 str1 深拷貝 拷貝的時候...

c 複製 拷貝建構函式

在c 中,定義乙個空類時,編譯器會預設宣告6個成員函式,它們分別是 class empty 注意 一下,編譯器預設合成的析構函式不是虛函式。首先,說一下什麼是拷貝建構函式 也可以叫複製建構函式 它是乙個特殊的建構函式,具有單個形參 此形參是對該類型別的引用,需要用const修飾,否則會無限迴圈呼叫複...

c 拷貝(複製)建構函式

class line line line const line obj 拷貝建構函式是一種特殊的建構函式,它在建立物件時,是使用同一類中之前建立的物件來初始化新建立的物件。拷貝建構函式通常用於 1 通過使用另乙個同型別的物件來初始化新建立的物件,即用已有物件給新建立物件賦值。line line1 1...