Почему некоторые люди используют swap для перемещений?

Например, в 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 для каждого члена)

56
задан James McNellis 10 March 2012 в 00:58
поделиться