Я, кажется, не понимаю, почему вы бы использовать move assignment operator
:Что использовать: перемещение оператора присваивания против оператора присваивания копии
CLASSA & operator=(CLASSA && other); //move assignment operator
закончилась, copy assignment operator
:
CLASSA & operator=(CLASSA other); //copy assignment operator
move assignment operator
принимает только r-value reference
, например,
CLASSA a1, a2, a3;
a1 = a2 + a3;
В copy assignment operator
, other
может быть конструктор с использованием copy constructor
или move constructor
(если other
инициализируется с RValue, это может быть двигаться возведенных --Если move-constructor
defined--).
Если это copy-constructed
, мы будем делать 1 копию, и этой копии нельзя избежать.
Если это move-constructed
, то производительность/поведение идентичны характеристикам, производимым при первой перегрузке.
Мои вопросы:
1- Почему один хочет реализовать move assignment operator
.
2- Если other
построен из r-значения, то который assignment operator
компилятор решил бы позвонить? И почему?
1) меньше работы, 2) было бы двусмысленно. –
Итак, вы говорите: для 2) будет вызвана первая перегрузка? – Kam
'CLASSA & operator = (CLASSA && other);' является [оператором присваивания перемещения] (http://en.cppreference.com/w/cpp/language/move_operator). Не знаете, как это изменит то, о чем вы просите. Оператор присваивания копии принимает либо 'CLASSA', либо' const CLASSA & '. – Radiodef