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