c ++中的复制构造函数如何工作?

时间:2015-04-20 05:07:35

标签: c++ constructor copy-constructor

当我将“obj”传递给函数时,我没有将“const Class& obj”传递给构造函数时,复制构造函数如何工作。我对此有疑问,因为关于i c ++的书正在阅读刚才提到的复制构造函数是什么以及如何实现它。但没有提到它是如何被召唤的。我是c ++的新手。我用谷歌搜索但却无法知道它是如何被调用的。提前感谢你:))

class Line{

  public:
   int getLength( void );
   Line( int len );             // simple constructor
   Line( const Line &obj);  // copy constructor

  private:
   int *ptr;
};

// Member functions definitions including constructor
Line::Line(int len){
 cout << "Normal constructor allocating ptr" << endl;
 // allocate memory for the pointer;
 ptr = new int;
 *ptr = len;
}

Line::Line(const Line &obj){
  cout << "Copy constructor allocating ptr." << endl;
  ptr = new int;
 *ptr = *obj.ptr; // copy the value
}

void display(Line obj){
 cout << "Length of line : " << obj.getLength() <<endl;
}

// Main function for the program
int main( ){

 Line line(10);
 display(line);

 return 0;
}

1 个答案:

答案 0 :(得分:0)

复制构造函数是一个特殊函数。在某些条件下,编译器会自动调用它。其中一个条件是在函数中有一个非引用参数,并将一个L值对象作为参数传递给该函数。使用复制构造函数初始化参数,并将传递给函数的参数用作复制构造函数的参数。

编译器会代表您执行各种操作,而无需您明确地执行这些操作。这是其中之一,它符合语言规则。