当通过值将类对象传递给任何函数时,将调用复制构造函数来创建本地对象,并在返回对象时调用析构函数。 但是,如果传递了对象引用,是否会调用复制构造函数?
答案 0 :(得分:1)
不,不会被调用。
引用是别名,即已存在的变量的另一个名称,而不是副本的名称。
看一下这个例子:
class Line {
public:
int getLength( void ){}
// simple constructor
Line( ){
cout<<"constructor"<<endl;
}
// copy constructor
Line( const Line &obj){
cout<<"copy cts\n";
}
};
void callR(Line& l){
cout<<"call by ref\n";
}
void callC(Line l){
cout<<"call by copy\n";
}
int main() {
Line line;
cout<<"before call by reference\n";
callR(line);
cout<<"before call by copy\n";
callC(line);
}
产生以下输出:
constructor -> Line line;
before call by reference
call by ref
before call by copy
copy cts
call by copy
正如您所见,当通过引用传递对象时,不会调用复制构造函数。将引用视为指针。