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