out членом, что почти наверняка ошибка. Первый вариант этого не даст, но вы точно этого хотите? Кажется, что надо добавить && к функции, не?
В первом варианте тоже есть move. Только он внутри swap
В первом варианте объект класса будет пустой, но не moved out.
А чем опасно такое состояние?
В общем случае - не гарантированы никакие операции в дальнейшем с этим объектом, кроме присваивания и деструктора.
unspecified. На листе ничем не стрельнет, но это не общая ситуация
Выше написали - всё остальное unspecified
На практике в листе всё норм
Да, на практике так. Но лучше не привыкать, а делать exchange 🙂
я думаю просто достаточно знать, что если контейнер(в общем случае контейнером является и строка, и вариант, и опшионал и тд) не предполагает явных аллокаций, то там весьма вероятно после мува будет фиг пойми что
мувд-аут на листе ж эквивалентно пустому, как и на векторе, не?
Move constructor. Constructs the container with the contents of other using move semantics. Allocator is obtained by move-construction from the allocator belonging to other. After the move, other is guaranteed to be empty().
ну вообще состояние moved-out вектора не гарантируется стандартом. Только что он в "корректном" состоянии
я хз, вот это написано на цпп рефе, куда он ссылается - без понятия
Я думаю чисто логически, что явно аллоцирует, то имеет гарантии, что нет - то нет
На практике да. Но для других объектов - всё что угодно.
нет, в том смысле что стандарт для стд контейнеров это вроде гарантирует, как минимум сейчас
Возможно, для стандартных контейнеров, надо уточнять. Я про общий случай писал.
Обсуждают сегодня