Я искал, как реализовать оператор + правильно по всему интернету, и все результаты я нашел сделать следующие шаги:Кто удаляет скопированный экземпляр в + оператор? (С ++)
const MyClass MyClass::operator+(const MyClass &other) const
{
MyClass result = *this; // Make a copy of myself. Same as MyClass result(*this);
result += other; // Use += to add other to the copy.
return result; // All done!
}
У меня есть несколько вопросов по поводу этого «процесса»:
Не так ли глупо реализовать этот оператор +, он вызывает оператор присваивания (который копирует класс) в первой строке, а затем конструктор копирования в возврате (который также копирует класс из-за того, что return по значению, поэтому он уничтожает первую копию и создает новую .., которая, откровенно говоря, не очень умна ...)
Когда я пишу a = b + c, часть b + c создает новую копию класса, тогда часть 'a =' копирует копию самому себе. , который удаляет копию, созданную b + c?
Есть ли лучший способ реализовать + оператор, не справляясь с классом дважды, а также без проблем с памятью?
заранее спасибо
В касательной, вы можете посыпать некоторые заявления COUT в классе конструкторов, конструктор копирования, оператор присваивания и деструктор, затем выполнить 'а = Ь + с; '. Получающийся результат может удивить вас, и он довольно образован, когда вы впервые изучаете C++. –
@OopsUser, вам нужно обратить более пристальное внимание на разницу между * удаляет * и * уничтожает *. В вашем вопросе переменная 'result' представляет собой переменную с автосогласованием, которая живет в стеке. Он выходит из области действия, когда функция возвращается и * уничтожается * как часть автоматической очистки функции. Это, однако, не удалено *. –
Jon Skeet удаляет его. –