Это конструктор перемещения класса 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уже перемещен из (и, опять же, он не гарантированно находится в допустимом состоянии), почему это должно работать?
Это не мой код. Я нашел его на сайте. Является ли это конструктором перемещения безопасным? И если да, то как?