4 複製建構函式

2022-05-09 09:12:10 字數 936 閱讀 3434

1.複製建構函式原型

const class_name(const class_name&)

2.何時會呼叫

2.1.函式按值傳遞物件時,會複製物件,呼叫複製建構函式

2.2.函式返回物件時,會先把這個物件複製乙份,呼叫複製建構函式。

2.3.顯示呼叫複製建構函式

3.預設複製建構函式,會一一複製非靜態資料成員。

4.何時需要重寫複製建構函式

當牽涉到new動態分配記憶體的時候,需要考慮是否需要重寫。今天實現string類時就遇到了此類問題。

string::string(const

char*temp)

string::string(const

string &st)

string::~string

()

如果不重寫複製建構函式,即這樣:

string::string(const

string &st)

兩個物件的指標都指向同一塊記憶體,當呼叫析構函式時,會釋放同一塊記憶體兩次,這將引發程式崩潰。

5.一同需要考慮的是,預設的賦值運算子=,即:operator=()

預設的賦值運算子也是一一複製靜態資料成員。所以呢,有new的地方也應該考慮重寫。具體如下:

string& string:: operator = (string&st)

原始碼見string:

注意:當自身類的引用作為類成員函式引數

時,這個引用的類可以直接訪問資料成員。

比如說

string& string:: operator = (string&st)

st可以直接訪問私有資料成員str。

複製建構函式

今天回看了前面的內容,發現這一章掌握的不夠好,就重看了一遍,順便總結一下 無規律總結 複製建構函式用於複製物件,即可以初始化物件,也可以將複製得到的物件作為實參傳遞給函式,多用於初始化。當我們這樣寫 string null bulk 9 9 9 9 在建立null bulk時編譯器先呼叫string...

複製建構函式

拷貝建構函式的標準寫法如下 class base base const base b 上述寫法見得最多,甚至你認為理所當然。那麼如果我們不寫成引用傳遞呢,而是值傳遞,那麼會怎樣?class base base const base b 編譯出錯 error c2652 base illegal co...

複製建構函式

呼叫複製建構函式的情形 在c 中,下面三種物件需要呼叫複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 3 乙個物件用於給另外乙個物件進行初始化 常稱為賦值初始化 4 編譯器生成臨時物件 一 乙個物件作為函式引數,以值傳遞的方式傳...