Переместите и скопируйте конструкторов, перемещу и соответственно скопирую базовые классы и элементы данных класса, без любых побочных эффектов
Переместите и скопируйте конструкторов, перемещу и соответственно скопирую базовые классы и элементы данных класса, без любых побочных эффектов.
Ожидаемое поведение перемещения и конструкторов копии:
Они перемещают или копируют базовые классы и элементы данных.
Конструктор перемещения устанавливает исходный объект в допустимое состояние.
Авторская разработка перемещения или конструкторов копии, которые имеют дополнительные побочные эффекты, может вызвать эти проблемы:
Производительность: Переместите и скопируйте конструкторов, часто вызываются алгоритмами стандартной библиотеки шаблонов (STL) и контейнерами. Эффективность наверху в этих конструкторах, вызванных побочными эффектами, может накопить и влиять на эффективность вашего кода.
Неожиданное поведение: Поскольку компиляторы могут не использовать вызовы, чтобы скопировать конструкторов, чтобы оптимизировать код, число раз, конструктор копии может быть вызван, неопределенно. В результате побочные эффекты конструктора копии могут произвести неожиданное поведение.
В теле копии или конструктора перемещения, Polyspace® не отмечает эти операции:
Скопируйте или переместите присвоения.
Реляционный или операции сравнения.
Модификация исходного объекта в операции пересылки.
Вызовы функционального std::swap или эквивалентный пользовательский noexceot подкачайте функции. Polyspace идентифицирует функции, что эти подписи как подкачка функционируют: void T::swap(T&) или void [N::]swap(T&, T&). Первая подпись представляет функцию членства класса T это берет один аргумент. Вторая подпись представляет лицо, не являющееся членом какой-либо организации, или статическую функцию в пространстве имен N это берет два аргумента. Имя swap может быть нечувствительным к регистру и снабжен префиксом или снабженный постфиксом символами нижнего подчеркивания.
Присвоение и модификация static переменные.
Polyspace отмечает любые другие операции в копии или конструкторе перемещения как нежелательный побочный эффект. Например, вызов пользовательской функции подкачки рассматривается нежелательным побочным эффектом, если функцией подкачки не является noexcept. Для подобного правила о копии и операторе присваивания перемещения, смотрите AUTOSAR C++14 Rule A6-2-1.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
| Группа: Специальные функции членства |
| Категория: необходимый, автоматизированный |