Объясняя операции перемещения объектов с коллегой, я в основном сказал, что операции перемещения не должны генерировать исключения в контейнере, потому что если операция перемещения не выполняется, то нет возможности надежно вернуть исходный объект. Думая об этом больше, мне интересно, если это не так, и что если операция перемещения, которая выполняет бросок, она может вернуть исходный объект обратно в исходное состояние.
Причиной этого является то, что если объект может бросать, он будет бросать не из-за копирования или перемещения содержащихся объектов из старого в новый адрес, а для выброса, если ресурс не был получен. Поэтому вся исходная информация все равно должна быть там. Если это так, то компилятор не сможет отменить операции, которые он сделал для восстановления исходного объекта?
Операция могла бы быть одним из способов, например перемещением целого числа, но в этом случае она могла бы просто закончить приложение, и, возможно, если разработчик захотел избежать односторонней операции, вместо этого мог бы использовать метод свопинга.
Это было бы возможно только при операциях перемещения по умолчанию, как если бы была какая-либо дополнительная логика, компилятору может быть сложно сделать обратное частичное преобразование.
Я упрощаю вещи? Есть ли что-то, что я пропустил, который держит контейнеры от движущихся объектов без конструктора/оператора перемещения без бросания?