本页使用了标题或全文手工转换

複製建構子

维基百科,自由的百科全书
跳转至: 导航搜索

複製建構子英语copy constructor)是C++程式語言中的一種特別的建構子,習慣上用來建立一個全新的物件,這個全新的物件相當於已存在物件的副本。這個建構子只有一個參數(引數):就是用來複製物件的參照(常用const修饰)。构造函数也可以有更多的参数,但除了最左第一个参数是该类的引用类型外,其它参数必须有默认值。

类的复制构造函数原型通常如下: Class_name(const Class_name & src);

一般來說,假如程式設計師沒有自行編寫複製建構子,那麼編譯器會自動地替每一個類別建立一個複製建構子(implicit copy constructor,隱性的複製建構子);相反地,程式設計師有自行編寫複製建構子(explicit copy constructor,顯性的複製建構子),那麼編譯器就不會建立它。

當物件包括指標或是不可分享的參照時,程式設計師編寫顯性的複製建構子是有其必要性的,例如處理檔案的部分,除了複製建構子之外,應該還要再編寫解構子設定運算子的部分,也就是三法則

下述代码编译时报错。因为复制构造函数的参数如果是传值,将导致对自身无限递归。

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编译器仅执行了一次缺省构造函数,没有执行复制构造函数。


相關條目[编辑]

注釋[编辑]