為什麼需要複製建構函式?

2021-05-24 13:16:23 字數 611 閱讀 6350

複製建構函式由編譯器隱式呼叫,主要的用途是:

(1)根據另乙個同型別的物件現實或隱式初始化乙個物件;

(2)複製乙個物件,將它作為實參傳給乙個函式;

(3)從函式返回時複製乙個物件;

(4)初始化順序容器中的元素;

(5)根據元素初始化式列表初始化陣列元素;

類型別物件的初始化:直接初始化和複製初始化

根據c++ primer p407頁上的例子:

什麼是直接初始化?

直接初始化就是初始化式放在圓括號中:string null_book("99-99999-99");

該方式直接呼叫與實參匹配的的建構函式或者預設建構函式;

複製初始化就是初始化式放在等號的右邊:string null_book = "99-9999-99"; 這種方式也是為了和c用法相容;

該方式首先指定建構函式建立乙個臨時物件,然後用複製建構函式將那個臨時物件複製到正在建立的物件;

複製初始化的要求:型別必須是支援複製的(io型別是不支援的),建構函式不是explicit的;

為什麼複製建構函式的引數需要加const和引用

第乙個輸出 constructor with argument.cexample aaa 2 這裡建立了變數aaa,在建立的同時還帶有引數2,那就呼叫帶引數的建構函式 第二個輸出 constructor with argument.cexample bbb 3 分析同第乙個 第三個輸出 assign...

QObject為什麼禁用複製建構函式和賦值運算子?

qobject禁用複製建構函式和賦值運算子源於它的性質 可能具有唯一的qobject objectname。qt物件可以擁有自己的名稱,objectname屬性儲存物件的名稱。那麼複製乙個qt物件,如何處理新的物件的名字?在物件層次結構中具有位置。qobjects將自己組織在物件樹中。那麼複製乙個q...

什麼是複製建構函式

複製建構函式又稱為拷貝建構函式,是一種特殊的建構函式,它由編譯器呼叫來完成一些基於同一類的其他物件的構建及初始化。它存在唯一乙個引數是不可變的。這個函式經常在函式呼叫期間於使用者定義型別的值傳遞及返回。拷貝建構函式要呼叫基類的拷貝建構函式和成員函式。一般它使用常量方式呼叫,另外,它也可以用非常量方式...