Por que algumas pessoas usam swap para atribuições de movimentação?
Por exemplo, stdlibc ++ tem o seguinte:
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;
}
Por que não apenas atribuir os dois membros __u a * isso diretamente? A troca não implica que __u seja atribuído aos * membros, apenas para posteriormente atribuir 0 e false ... nesse caso, a troca está fazendo um trabalho desnecessário. o que estou perdendo? (o unique_lock :: swap apenas faz um std :: swap em cada membro)