Например, stdlibС++ имеет следующее:
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 * непосредственно этому? Не имеет ли своп подразумевать, что __u назначается * этим членам, только для того, чтобы позже назначить 0 и false... в этом случае своп делает ненужную работу. Что мне не хватает? (уникальный_lock:: swap просто выполняет std:: swap для каждого члена)