1.複製建構函式原型
const class_name(const class_name&)
2.何時會呼叫
2.1.函式按值傳遞物件時,會複製物件,呼叫複製建構函式
2.2.函式返回物件時,會先把這個物件複製乙份,呼叫複製建構函式。
2.3.顯示呼叫複製建構函式
3.預設複製建構函式,會一一複製非靜態資料成員。
4.何時需要重寫複製建構函式
當牽涉到new動態分配記憶體的時候,需要考慮是否需要重寫。今天實現string類時就遇到了此類問題。
string::string(constchar*temp)
string::string(const
string &st)
string::~string
()
如果不重寫複製建構函式,即這樣:
string::string(conststring &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 編譯器生成臨時物件 一 乙個物件作為函式引數,以值傳遞的方式傳...