C++中的复制构造函数是如何工作的?
How Does the copy constructor in c++ work?
当我将 "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;
}
复制构造函数是一个特殊的函数。它由编译器在特定条件下自动调用。其中一个条件是当您在函数中有一个非引用参数时,您将一个左值对象作为参数传递给该函数。使用复制构造函数初始化参数,传递给函数的参数用作复制构造函数的参数。
编译器代表你做各种各样的事情,你不必明确地去做。这是其中之一,而且符合语言规则。
当我将 "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;
}
复制构造函数是一个特殊的函数。它由编译器在特定条件下自动调用。其中一个条件是当您在函数中有一个非引用参数时,您将一个左值对象作为参数传递给该函数。使用复制构造函数初始化参数,传递给函数的参数用作复制构造函数的参数。
编译器代表你做各种各样的事情,你不必明确地去做。这是其中之一,而且符合语言规则。