Это плохая идея - семантика присваивания заключается в изменении состояния существующего объекта, чтобы он соответствовал другому.Существует конструктор для инициализации объекта, который ранее не существовал.
Кроме того, вы не можете инициализировать элементы с помощью списка инициализации элементов , который требует, чтобы ваши элементы данных были конструируемыми по умолчанию и не- const
.
Во всяком случае, было бы более целесообразно определить присваивание в терминах конструктора, например:
foo& foo::operator=(foo&& rhs)
{
this->~foo();
new (this) foo{std::move(rhs};
}
Для приведенного выше фрагмента необходимоосторожно, чтобы не вызывать UB, хотя: Размещение нового и присвоение класса с константным членом
В общем, я бы просто определил оба оператора по отдельности, если вы не можете позволить компилятору генерировать ихдля вас.