Переместите и скопируйте конструкторов, перемещу и соответственно скопирую базовые классы и элементы данных класса, без любых побочных эффектов
Переместите и скопируйте конструкторов, перемещу и соответственно скопирую базовые классы и элементы данных класса, без любых побочных эффектов.
Ожидаемое поведение перемещения и конструкторов копии:
Они перемещают или копируют базовые классы и элементы данных.
Конструктор перемещения устанавливает исходный объект в допустимое состояние.
Авторская разработка перемещения или конструкторов копии, которые имеют дополнительные побочные эффекты, может вызвать эти проблемы:
Производительность: Переместите и скопируйте конструкторов, часто вызываются алгоритмами стандартной библиотеки шаблонов (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
.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: Специальные функции членства |
Категория: необходимый, автоматизированный |