Это конструктор перемещения класса X
:
X::X(X&& rhs)
: base1(std::move(rhs))
, base2(std::move(rhs))
, mbr1(std::move(rhs.mbr1))
, mbr2(std::move(rhs.mbr2))
{ }
Вот о чем я опасаюсь:
- Мы переходим от
rhs
дважды, аrhs
не может находиться в допустимом состоянии. Разве это не поведение undefined для инициализацииbase2
? - Мы перемещаем соответствующие члены
rhs
вmbr1
иmbr2
, но посколькуrhs
уже перемещен из (и, опять же, он не гарантированно находится в допустимом состоянии), почему это должно работать?
Это не мой код. Я нашел его на сайте. Является ли это конструктором перемещения безопасным? И если да, то как?