Я так понимаю такая запись «заменяет» copy assignment operator и move assignment operator?
T& T::operator=(T arg)
{
swap(arg);
return *this;
}
А расскажите вкратце как это работает? Или может где почитать, чтобы ясно было? Заранее спасибо!
S>Я так понимаю такая запись «заменяет» copy assignment operator и move assignment operator?
S>S>T& T::operator=(T arg)
S>{
S> swap(arg);
S> return *this;
S>}
S>
S>А расскажите вкратце как это работает? Или может где почитать, чтобы ясно было? Заранее спасибо!
Работает очень просто. Когда оператор вызывается для temporary rhs (val = get_val()), результат формально перемещается (а скорее всего, благодаря copy elision, с ним вообще ничего не происходит) в аргумент T arg. Если же оператор вызывается для lvalue, вызывается обыкновенный конструктор копирования, и T arg инициализируется копией.
После этого с arg можно смело делать swap.
S>Я так понимаю такая запись «заменяет» copy assignment operator и move assignment operator?
S>S>T& T::operator=(T arg)
S>{
S> swap(arg);
S> return *this;
S>}
S>
S>А расскажите вкратце как это работает? Или может где почитать, чтобы ясно было? Заранее спасибо!
Данную операцию присваивания детально описал Герб Саттер в книжках про сложные задачи.
Естественно, там не было про перемещение, а только про копирование.
Наверное, на его сайте про сложные задачи можно найти — я не помню номера.
S>S>T& T::operator=(T arg)
S>{
S> swap(arg);
S> return *this;
S>}
S>
А noexcept где?!