С++11 unified assignment operator
От: sanx  
Дата: 07.03.16 21:11
Оценка:
Я так понимаю такая запись «заменяет» copy assignment operator и move assignment operator?

T& T::operator=(T arg)
{
    swap(arg);
    return *this;
}

А расскажите вкратце как это работает? Или может где почитать, чтобы ясно было? Заранее спасибо!
с++11
Re: С++11 unified assignment operator
От: Vamp Россия  
Дата: 07.03.16 21:39
Оценка:
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.
Да здравствует мыло душистое и веревка пушистая.
Re: С++11 unified assignment operator
От: LaptevVV Россия  
Дата: 08.03.16 05:54
Оценка:
S>Я так понимаю такая запись «заменяет» copy assignment operator и move assignment operator?
S>
S>T& T::operator=(T arg)
S>{
S>    swap(arg);
S>    return *this;
S>}
S>

S>А расскажите вкратце как это работает? Или может где почитать, чтобы ясно было? Заранее спасибо!
Данную операцию присваивания детально описал Герб Саттер в книжках про сложные задачи.
Естественно, там не было про перемещение, а только про копирование.
Наверное, на его сайте про сложные задачи можно найти — я не помню номера.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: С++11 unified assignment operator
От: Meyers  
Дата: 12.08.17 00:20
Оценка:
S>
S>T& T::operator=(T arg)
S>{
S>    swap(arg);
S>    return *this;
S>}
S>


А noexcept где?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.