cpp_copy_constructor - ShenYj/ShenYj.github.io GitHub Wiki
拷贝构造函数 (Copy Constructor)
- 拷贝构造函数是构造函数的一种
- 当利用已存在的对象创建一个新对象时(类似于拷贝),就会调用新对象的拷贝构造函数进行初始化
- 拷贝构造函数的格式是固定的,接收一个const引用作为参数
class Car {
int m_price;
public:
/// 普通构造函数
Car(int price = 0) :m_price(price) { }
/// 拷贝构造函数
/// 不定义拷贝构造函数,不会生成拷贝构造函数,但能够默认会实现拷贝,利用实例创建新实例时会将实例的成员分别赋值
Car(const Car &car) {
this->m_price = car.mprice;
}
};
int main() {
/// 创建一个实例,此时创建实例后会调用普通构造函数进行初始化
Car car1;
/// 利用实例 car1 创建 car2
/// car2 就会调用拷贝构造函数进行初始化
Car car2(car1);
return 0;
}
- 使用初始化列表
Car(const Car &car) :m_price(car.m_price) {
}
默认情况下,如果成员变量都是基本数据类型,没有特殊要求,比如只拷贝其中部分成员变量,是没有必要定义拷贝构造函数的
int main() {
Car car1;
/// 下面两种写法效果一致, 都会利用已存在实例创建新实例
Car car2(car1);
Car car3 = car2;
/// 这种方式并不是利用已存在实例创建新实例
Car car4; /// 此时 car4 已经创建
car4 = car3 /// 这里不会调用拷贝构造函数, 只是将car3的数据赋值给car4
}