复制构造函数

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

複製构造函数(英語: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);

呼叫複製构造函数的情形包括:

  1. 用一個對象來初始化正在構造的對象變數;
  2. 函數返回一個對象;
  3. 函數參數作為對象傳值;
  4. 投擲一個異常對象;
  5. 捕捉一個異常對象;
  6. 對象放在大括號中,即{ }。

上述情形未必會呼叫複製构造函数。因為C++標準允許編譯器實現做一些最佳化。例如:

Class X b=X();

Microsoft Visual C++ 2010編譯器僅執行了一次預設构造函数,沒有執行複製构造函数。

註釋[編輯]

  1. ^ 隐式的複製构造函数,英語:implicit copy constructor,由編譯器自動建立的複製构造函数
  2. ^ 显式的複製构造函数,英語:explicit copy constructor,由程序员自行編寫的複製构造函数

參考資料[編輯]

相關條目[編輯]