複製建構子
外觀
此條目沒有列出任何參考或來源。 (2015年5月29日) |
複製建構子(英語:Copy constructor)是C++程式語言中的一種特別的建構子,習慣上用來建立一個全新的物件,這個全新的物件相當於已存在物件的副本。這個建構子只有一個參數(引數):就是用來複製物件的參照(常用const修飾)。建構子也可以有更多的參數,但除了最左第一個參數是該類別的參照類別型外,其它參數必須有預設值。
類別的複製建構子原型通常如下:Class_name(const Class_name & src);
一般來說,假如程式設計師沒有自行編寫複製建構子,那麼編譯器會自動地替每一個類別建立一個複製建構子;相反地,程式設計師有自行編寫複製建構子,那麼編譯器就不會建立它[註 1][註 2]。
當物件包括指標或是不可分享的參照時,程式設計師編寫顯性的複製建構子是有其必要性的,例如處理檔案的部分,除了複製建構子之外,應該還要再編寫解構子與設定運算子的部分,也就是三法則。
下述代碼編譯時報錯。因為複製建構子的參數如果是傳值,將導致對自身無限遞歸。
class X;
X(X copy_from_me);
X(const X copy_from_me);
呼叫複製建構子的情形包括:
- 用一個對象來初始化正在構造的對象變數;
- 函數返回一個對象;
- 函數參數作為對象傳值;
- 投擲一個異常對象;
- 捕捉一個異常對象;
- 對象放在大括號中,即{ }。
上述情形未必會呼叫複製建構子。因為C++標準允許編譯器實現做一些最佳化。例如:
Class X b=X();
Microsoft Visual C++ 2010編譯器僅執行了一次預設建構子,沒有執行複製建構子。