Когда объект класса передается по значению в любую функцию, вызывается конструктор копирования для создания локального объекта, а деструктор вызывается при возврате объекта. Но будет ли вызываться конструктор копирования, если передается ссылка на объект?

-4
Reena Cyril 28 Июл 2017 в 14:26
1
Вы пробовали? Что случилось?
 – 
DimChtz
28 Июл 2017 в 14:26
4
Создайте минимальный воспроизводимый пример и объясните, какое поведение вы видели и чего ожидали.
 – 
UnholySheep
28 Июл 2017 в 14:28
1
Передача по ссылке не вызывает копирования, поэтому конструктор копирования не должен вызываться.
 – 
Some programmer dude
28 Июл 2017 в 14:28
3
Похоже, вы могли бы использовать хорошую книгу по C ++
 – 
NathanOliver
28 Июл 2017 в 14:29
4
Нет, не будет.
 – 
Chris Drew
28 Июл 2017 в 14:30

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

Как видите, конструктор копирования не вызывается, когда объект передается по ссылке. Думайте о ссылке как об указателе.

2
Davide Spataro 28 Июл 2017 в 14:43