基本概念

  • 只有一个参数,是对同类对象的引用
  • 形如 X::X( &X ) 或 X::X(const X &),后面的常用

    1. Complex c1; // construtor
    2. Complex c2(c1); // copy constructor
  • 不允许 X::X( X ) 这样的复制构造函数

    起作用的三种情况

  • 用一个对象去初始化同类的另一个对象

    1. Complex c2(c1);
    2. Complex c2 = c1; // 初始化语句,非赋值语句
  • 函数形参的传入

    • 这样形参就不一定是实参的一个拷贝了
      1. class A
      2. {
      3. public:
      4. A(A & a) { cout << "copy constructor called" << endl;}
      5. };
  • 函数返回值是一个对象,即使没有赋值操作

BUT! 赋值操作不会调用拷贝构造函数!

  1. Complex c1 = c2; // 初始化语句,调用
  2. Complex c1;
  3. c1 = c2; // 赋值语句,不调用

常量引用参数

  • 函数中的形参使用引用,不会造成复制构造函数的调用,减少开销