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