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)

questionAnswers(4)

yourAnswerToTheQuestion