Когда объект класса передается по значению в любую функцию, вызывается конструктор копирования для создания локального объекта, а деструктор вызывается при возврате объекта. Но будет ли вызываться конструктор копирования, если передается ссылка на объект?
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
Как видите, конструктор копирования не вызывается, когда объект передается по ссылке. Думайте о ссылке как об указателе.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .