Бросок операций пересылки может привести к контейнерам STL с помощью соответствующих операций копии
Этот дефект происходит, когда класс явным образом объявляет конструктора перемещения, который пропускает noexcept спецификатор или имеет noexcept спецификатор, аргумент которого оценивает к false. Дефект также происходит, если у явным образом заявленного конструктора перемещения есть бросок ( спецификация исключения (удержанный от использования на C++ 11 и удаленный на C++ 17).type)
Средство проверки не повышает флаг, если конструктор перемещения неявно объявляется или явным образом объявляется как =default.
Если операция пересылки может выдать исключения, некоторые контейнеры STL будут использовать операции копии вместо этого и не получать выигрыши в производительности операции пересылки. Например, реализация std::vector::resize метод использует std::move_if_noexcept и выполняет операцию пересылки для изменения размеров вектора, только если операция пересылки объявляется noexcept.
Добавьте noexcept спецификатор к объявлению конструктора перемещения.
Если конструктор перемещения содержит выражения, которые могут выдать, зафиксировать те выражения. Обнаружить нарушения noexcept спецификация исключения, используйте средство проверки Noexcept function exits with exception.
Повышения производительности могут варьироваться на основе компилятора, реализации библиотеки и среды, которую вы используете.
| Группа: Производительность |
| Язык: C++ |
| Значение по умолчанию: Off |
Синтаксис командной строки:
MOVE_OPERATION_MAY_THROW |
| Удар: низко |