複製建構子

複製建構子  是C + + 編程語言中的一種特別的建構子 ， 習慣上用來建立一個全新的物件 ， 這個全新的物件相當於已存在物件的副本 。 這個建構子只有一個參數 （ 引數 ） ： 就是用來複制物件的參照 （ 常用const修飾 ） 。 構造函數也可以有更多的參數 ， 但除了最左第一個參數是該類的引用類型外 ， 其它參數必須有默認值 。 類的複製構造函數原型通常如下 ： Class_name ( const Class_name & src ); 一般來說 ， 假如程式設計師沒有自行編寫複製建構子 ， 那麼編譯器會自動地替每一個類別建立一個複製建構子 ； 相反地 ， 程式設計師有自行編寫複製建構子 ， 那麼編譯器就不會建立它 。 當物件包括指標或是不可分享的參照時 ， 程式設計師編寫顯性的複製建構子是有其必要性的 ， 例如處理檔案的部分 ， 除了複製建構子之外 ， 應該還要再編寫解構子與設定運算子的部分 ， 也就是三法則 。 下述代碼編譯時報錯 。 因爲複製構造函數的參數如果是傳值 ， 將導致對自身無限遞歸 。 class X ； X ( X copy_from_me ); X ( const X copy_from_me ); 調用複製構造函數的情形包括 ： 用一個對象來初始化正在構造的對象變量 ； 函數返回一個對象 ； 函數參數作爲對象傳值 ； 拋出一個異常對象 ； 捕捉一個異常對象 ； 對象放在大括號中 ， 即 { } 。 上述情形未必會調用複製構造函數 。 因爲C + + 標準允許編譯器實現做一些優化 。 例如 ： Class X b = X; Microsoft Visual C++ 2010編譯器僅執行了一次缺省構造函數 ， 沒有執行復制構造函數 。