C 拷貝建構函式 賦值函調用數

2021-06-20 03:24:28 字數 873 閱讀 6002

類定義中,如果未提供自己的拷貝建構函式,則

c++提供乙個預設拷貝建構函式,就像沒有提供建構函式時,

c++提供預設建構函式一樣。

c++提供的預設拷貝建構函式工作的方法是:完成乙個成員乙個成員的拷貝,如果成員是類物件,則呼叫其拷貝建構函式或者預設拷貝建構函式。

而拷貝建構函式和賦值運算子則是

c++獨有的,也是很多人所不熟悉的地方。建構函式和拷貝建構函式用於從乙個物件複製出另乙個物件。系統提供的預設拷貝建構函式和賦值運算的工作方式是記憶體拷貝,也就是淺拷貝。如果物件中用到了需要手動釋放的物件,則會出現問題,這時就要手動過載這兩個函式,實現深拷貝。

考慮如下情況:

#include >

#include >

struct node

~node()

int * p;

};int main()

什麼時候呼叫拷貝建構函式、什麼時候呼叫賦值函式(=號操作符)

1. a a2(a1);    

這個很明顯呼叫的是拷貝建構函式

2. a3 = a2   

這個很明顯呼叫的是賦值運算

3. a a3 = a1;   

這個就沒其它幾個那麼好懂了,看起來即像是呼叫拷貝建構函式建立乙個物件,又像是呼叫賦值運算複製乙個物件,還是兩個都調了?

實際上,這個呼叫的是拷貝建構函式,和第二行的方式是等價的。

對於第三行的

a a3 = a1;

這種方式,我們如何去理解它呢?實際上有乙個很好記的統一的大原則:

從無到有是呼叫建構函式,從有到有呼叫的是賦值運算

。基於這個原則,前面四行**哪個是呼叫哪個函式就很好區分了。

拷貝建構函式和賦值構造函式呼叫次序

class cprintelement cprintelement cprintelement const cprintelement temp cprintelement cprintelement operator const cprintelement temp int main cprint...

C 建構函式例項 拷貝構造,賦值

define crt secure no warnings windows系統 include include include using namespace std class student student operator const student s student const stude...

C 賦值函式與拷貝建構函式

一看到 操作符,認為必然呼叫賦值函式,然而在下面的例子中,語句a b c顯示的是呼叫拷貝建構函式。結論 在看到 操作符為物件賦值的時候,如果是在物件的定義時候出現則呼叫拷貝建構函式,如果是不是,例子中的b d,則為賦值函式。include using namespace std class a a ...