Зачем нужна ссылка в конструкторе копирования?
Допустим имеем следующий класс
class String
{
private:
char* buf;
int size;
public:
String(const char* str)
{
// code
}
String(const String& str) // Почему здесь ссылка?
{
char* buf = new char[str.size + 1];
memcpy(buf, str.buf, str.size + 1);
}
}
Учитывая что аргумент String str мы не собираемся менять, зачем передавать его по ссылке?
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Чтобы передать класс в функцию (или в конструктор) по значению (а не по ссылке), должен быть вызван какой-нибудь конструктор.
Если вы замените ссылку на String str и попробуете сделать String a("x"); String b(a);, то для b параметр конструктора str должен быть сконструирован. А каким конструктором он будет конструироваться? Тем же самым? Понятно, в чем проблема?
Поэтому язык запрещает создавать конструкторы вида T(T).