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