Например, в stdlibc ++ есть следующее:
unique_lock& operator=(unique_lock&& __u)
{
if(_M_owns)
unlock();
unique_lock(std::move(__u)).swap(*this);
__u._M_device = 0;
__u._M_owns = false;
return *this;
}
Почему бы просто не назначить два члена __u напрямую * this? Разве своп не подразумевает, что __u назначается членам * this только для того, чтобы позже было присвоено 0 и false ... и в этом случае своп выполняет ненужную работу. Что мне не хватает? (unique_lock :: swap просто выполняет std :: swap для каждого члена)