Line Line::operator =(Line ln) {
cout << "Assignment operator\n";
Line temp;
temp.ptr = new int;
*temp.ptr = *(ln.ptr);
return temp;
}
В приведенном выше фрагменте кода, конструктор копирования не вызывается, когда следующее утверждение выполняется:Почему конструктор копирования не вызывается при возврате функции?
return temp;
Поскольку возвращение по значению, почему конструктор копирования не вызывается?
Благодаря
Ошибка реализации вашего оператора: 'operator =' должен возвращать ссылку * * на '* this', а не на новый объект. –
@ Konrad: Спасибо, что указали это. Итак, вы имеете в виду: this.ptr = * (ln.ptr); и вернуть * это? – Iceman
Да. Весь объект 'temp' не нужен. Однако вы также не должны использовать (исходный) указатель здесь для начала. C++ обеспечивает лучшие механизмы. –