這個算是c++非常基礎的東西,感覺知道有這個東西,但裡面的原因不知道,有點蛋疼,今天又翻開了曾經看過的c++primer,看的時候感覺都看過
只有單個形參,而且該形參是對本類型別物件的引用(常用 const 修飾),這樣的建構函式稱為複製建構函式。與預設建構函式一樣,複製建構函式可由編譯器隱式呼叫。複製建構函式可用於:
• 根據另乙個同型別的物件顯式或隱式初始化乙個物件。
• 複製乙個物件,將它作為實參傳給乙個函式。//隱式呼叫
• 從函式返回時複製乙個物件。//隱式呼叫
• 初始化順序容器中的元素。
• 根據元素初始化式列表初始化陣列元素
當用於類型別物件時,初始化的複製形式和直接形式有所不同:直接初始化
直接呼叫與實參匹配的建構函式,複製初始化總是呼叫複製建構函式。複製初始
化首先使用指定建構函式建立乙個臨時物件(第 7.3.2 節),然後用複製構造
函式將那個臨時物件複製到正在建立的物件
string null_book = "9-999-99999-9"; // copy-initialization
string dots(10, '.'); // direct-initialization
string empty_copy = string(); // copy-initialization
string empty_direct; // direct-initialization
null_book首先呼叫構造函式引數為字串生成乙個臨時物件,然後呼叫複製建構函式初始化null_book為臨時物件的副本
和賦值操作符的區別:賦值操作符只是對=的重寫不是建構函式,而複製建構函式是建構函式
一般情況下不需要重新定義複製建構函式和賦值操作符,但以下清空除外:
這樣的類經常有乙個,資料成員是指標,或者有成員表示在建構函式中分配的其他資源。而另一些類在建立新物件時必須做一些特定工作。這兩種情況下,都必須定義複製建構函式。
一般需要複製建構函式的也需要賦值操作符,原因一樣有可能成員函式是指標型別,但生成另乙個物件時只是賦值了指標但沒有分配相應的記憶體。
具體不懂可以再查閱c++primer
複製建構函式
今天回看了前面的內容,發現這一章掌握的不夠好,就重看了一遍,順便總結一下 無規律總結 複製建構函式用於複製物件,即可以初始化物件,也可以將複製得到的物件作為實參傳遞給函式,多用於初始化。當我們這樣寫 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 編譯器生成臨時物件 一 乙個物件作為函式引數,以值傳遞的方式傳...