複製建構子

複製建構子（）是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编译器仅执行了一次缺省构造函数，没有执行复制构造函数。

 注釋 

 參考資料 

 相關條目 
 缺省构造函数
 設定運算子 (C++)

 三法則

C
C
C