通过引用传递对象时是否调用了复制构造函数?

时间:2017-07-28 11:26:03

标签: c++ constructor

当通过值将类对象传递给任何函数时,将调用复制构造函数来创建本地对象,并在返回对象时调用析构函数。 但是,如果传递了对象引用,是否会调用复制构造函数?

1 个答案:

答案 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

正如您所见,当通过引用传递对象时,不会调用复制构造函数。将引用视为指针。

相关问题