C 中複製(拷貝)建構函式的理解

2021-10-04 16:24:14 字數 2146 閱讀 5535

網上對於複製建構函式的講解數不勝數,這裡就不去仔細羅列其概念了(下面的概念是網上的,但是並未對**的執行結果進行講解,所以理解起來並不清晰,在文末我新增了自己的理解),直接上**,我們結合理論分析**得出拷貝建構函式的使用方法和呼叫方式:

概念簡析

拷貝建構函式是一種特殊的建構函式,它在建立物件時,是使用同一類中之前建立的物件來初始化新建立的物件。拷貝建構函式通常用於:

通過使用另乙個同型別的物件來初始化新建立的物件。

複製物件把它作為引數傳遞給函式。

複製物件,並從函式返回這個物件。

如果在類中沒有定義拷貝建構函式,編譯器會自行定義乙個。如果類帶有指標變數,並有動態記憶體分配,則它必須有乙個拷貝建構函式。拷貝建構函式的最常見形式如下:

classname (

const classname &obj)

在這裡,obj 是乙個物件引用,該物件是用於初始化另乙個物件的。

#include

using namespace std;

class line

;// 成員函式定義,包括建構函式

line:

:line

(int len)

line:

:line

(const line &obj)

line::~

line

(void

)int line:

:getlength

(void

)void

display

(line obj)

// 程式的主函式

intmain()

當上面的**被編譯和執行時,它會產生下列結果:

呼叫建構函式

呼叫拷貝建構函式並為指標 ptr 分配記憶體

line 大小 :

10釋放記憶體

釋放記憶體

結果解釋在最後

下面的例項對上面的例項稍作修改,通過使用已有的同型別的物件來初始化新建立的物件:

#include

using namespace std;

class line

;// 成員函式定義,包括建構函式

line:

:line

(int len)

line:

:line

(const line &obj)

line::~

line

(void

)int line:

:getlength

(void

)void

display

(line obj)

// 程式的主函式

intmain()

當上面的**被編譯和執行時,它會產生下列結果:

呼叫建構函式

呼叫拷貝建構函式並為指標 ptr 分配記憶體

呼叫拷貝建構函式並為指標 ptr 分配記憶體

line 大小 :

10釋放記憶體

呼叫拷貝建構函式並為指標 ptr 分配記憶體

line 大小 :

10釋放記憶體

釋放記憶體

釋放記憶體

第一段**中:

使用line作為引數傳入display函式中,首先會呼叫拷貝建構函式對line進行複製,使用該副本在函式中進行操作;函式結束後該副本作為區域性變數被**,因此列印釋放記憶體;

第二段**中:

display函式過程同上第一段**此外,在使用line1例項來初始化物件line2的過程中,同樣呼叫拷貝建構函式,複製得到line2示例;因此,第乙個釋放記憶體:釋放第乙個display複製的形參例項;第二個:釋放第二個display複製的形參例項;第三四個:return 釋放line1和line2;

c 複製 拷貝建構函式

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

c 拷貝(複製)建構函式

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

理解C 中拷貝建構函式

拷貝建構函式的功能是用乙個已有的物件來初始化乙個被建立的同樣物件,是一種特殊的建構函式,具有一般建構函式的所有特性,當建立乙個新物件的時候系統會自動呼叫它 其形參是本類物件的引用,它的特殊功能是將引數代表的物件逐域拷貝到新建立的物件中。使用者可以根據實際需要定義特定的拷貝建構函式,以實現同類物件之間...