複製建構函式

2021-07-29 17:40:51 字數 942 閱讀 6943

1、  只有單個形參,而且該形參是對本類型別物件的引用(常用 const 修飾),這樣的建構函式稱為複製建構函式。與預設建構函式一樣,複製建構函式可由編譯器隱式呼叫。

3、  如果我們沒有定義複製建構函式,編譯器就會為我們合成乙個。與合成的預設建構函式不同,即使我們定義了其他建構函式,也會合成複製建構函式。合成複製建構函式的行為是,執行逐個成員初始化,將新物件初始化為原物件的副本。合成複製建構函式直接複製內建型別成員的值,類型別成員使用該類的複製建構函式進行複製。陣列成員的複製是個例外。雖然一般不能複製陣列,但如果乙個類具有陣列成員,則合成複製建構函式將複製陣列。複製陣列時合成複製建構函式將複製陣列的每乙個元素。

4、  對許多類而言,合成複製建構函式只完成必要的工作。只包含類型別成員或內建型別(但不是指標型別)成員的類,無須顯式地定義複製建構函式,也可以複製。然而,有些類必須對複製物件時發生的事情加以控制。這樣的類經常有乙個資料成員是指標,或者有成員表示在建構函式中分配的其他資源。而另一些類在建立新物件時必須做一些特定工作。這兩種情況下,都必須定義複製建構函式。

5、  有些類需要完全禁止複製。例如,iostream 類就不允許複製。如果想要禁止複製,似乎可以省略複製建構函式,然而,如果不定義複製建構函式,編譯器將合成乙個。為了防止複製,類必須顯式宣告其複製建構函式為 private。然而,類的友元和成員仍可以進行複製。如果想要連友元和成員中的複製也禁止,就可以宣告乙個(private)複製建構函式但不對其定義。宣告而不定義成員函式是合法的,但是,使用未定義成員的任何嘗試將導致鏈結失敗。通過宣告(但不定義)private 複製建構函式,可以禁止任何複製類型別物件的嘗試:使用者**中複製嘗試將在編譯時標記為錯誤,而成員函式和友元中的複製嘗試將在鏈結時導致錯誤。

6、不允許複製的類物件只能作為引用傳遞給函式或從函式返回,它們也不能用作容器的元素。

複製建構函式

今天回看了前面的內容,發現這一章掌握的不夠好,就重看了一遍,順便總結一下 無規律總結 複製建構函式用於複製物件,即可以初始化物件,也可以將複製得到的物件作為實參傳遞給函式,多用於初始化。當我們這樣寫 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 編譯器生成臨時物件 一 乙個物件作為函式引數,以值傳遞的方式傳...