如果没有定义复制构造函数,编译器会自动合成一个。与合成的默认构造函数不同,即使我们定义了其他构造函数,也会合成复制构造函数。合成复制构造函数会对成员逐个进行初始化,将新对象初始化为原对象的副本。
编译器将原对象的每个非 static 成员,依次复制到正创建的对象。合成复制构造函数直接复制内置类型成员的值,类类型成员使用该类的复制构造函数进行复制。数组成员的复制要注意:虽然一般不能复制数组,但如果一个类具有数组成员,则合成复制构造函数将复制数组。复制数组时合成复制构造函数将复制数组的每一个元素。
- class Sales_item {
- // other members and constructors as before
- private:
- std::string isbn;
- int units_sold;
- double revenue;
- };
- // 合成复制构造函数如下所示:
- Sales_item::Sales_item(const Sales_item &orig):
- isbn(orig.isbn), // uses string copy constructor
- units_sold(orig.units_sold), // copies orig.units_sold
- revenue(orig.revenue) // copy orig.revenue
- { } // empty body