Разрешены ли свопы самостоятельно проверять?C++

Программы на C++. Форум разработчиков
Anonymous
Разрешены ли свопы самостоятельно проверять?

Сообщение Anonymous »

В то время как проверка и другие! = Это , как правило, не является хорошей идеей в задании Move/Copy, и идиома копирования и замены должна быть предпочтительной, разрешена ли это для замены для выполнения такой проверки?

Код: Выделить всё

// same for move, can handle both with `(cls other)`
cls& operator=(const cls& other) {
cls temp{ other };
swap(*this, other);
return *this;
}
< /code>
std::swap
:

Код: Выделить всё

template 
void swap(T& lhs, T& rhs) {
T tmp{ std::move(lhs); }  // move ctor
lhs = std::move(rhs);  // move assign
rhs = std::move(tmp);  // move assign
}  // temp dtor
< /code>
While clearly not helping in assignment which constructs a new temporary, sticking an if (&lhs == &rhs) { return; }
В верхней части SWAP может сохранять операции в каком -то общем коде.
разрешает ли стандарт это, или он говорит, что (2+1) движения всегда выполняются? Есть ли причины, почему это не сработает?

Подробнее здесь: https://stackoverflow.com/questions/797 ... self-check

Вернуться в «C++»