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
}
⚠️ **GitHub.com Fallback** ⚠️