Статья MSDN, Как написать Write Constuctor, имеет следующую рекомендацию.
Если вы предоставляете как конструктор перемещения, так и оператор назначения перемещения для своего класса, вы можете исключить избыточный код, написав конструктор перемещения, чтобы вызвать оператор назначения перемещения. в следующем примере показана измененная версия конструктора перемещения, которая вызывает оператор присваивания перемещения:
// Move constructor.
MemoryBlock(MemoryBlock&& other)
: _data(NULL)
, _length(0)
{
*this = std::move(other);
}
Является ли этот код неэффективным, дважды инициализируя значения MemoryBlock
, или компилятор сможет оптимизировать дополнительные инициализации? Должен ли я всегда писать свои конструкторы перемещения, вызывая оператор присваивания перемещения?