Перемещенный - от объекта не буду получен доступ чтением
Перемещенный - от объекта не буду получен доступ чтением.
Поскольку содержимое исходного объекта обычно не задано после операции пересылки, небезопасно выполнить операции, которые получают доступ к содержимому исходного объекта после операции пересылки. Доступ к содержимому исходного объекта после операции пересылки может привести к нарушению целостности данных, неожиданному значению или недопустимому разыменованию указателя.
Операции, которые не делают предположений о состоянии объекта, не нарушают это правило.
Стандарт C++ указывает, что эти операции пересылки оставляют исходный объект в хорошо заданном состоянии после перемещения:
Переместите конструкцию, присвоение перемещения, преобразовав [1] конструкция перемещения, и преобразовав присвоение перемещения std::unique_ptr ввод
Переместите конструкцию, присвоение перемещения, преобразовав конструкцию перемещения, преобразовав присвоение перемещения std::shared_ptr ввод
Переместите присвоение конструкции и перемещения от std::unique_ptr из std::shared_ptr ввод
Переместите конструкцию, присвоение перемещения, преобразовав конструкцию перемещения, и преобразовав присвоение перемещения std::weak_ptr ввод
std::move() из std::basic_ios ввод
Переместите конструктора и присвоение перемещения std::basic_filebuf ввод
Переместите конструктора и присвоение перемещения std::thread ввод
Переместите конструктора и присвоение перемещения std: unique_lock ввод
Переместите конструктора и присвоение перемещения std::shared_lock ввод
Переместите конструктора и присвоение перемещения std::promise ввод
Переместите конструктора и присвоение перемещения std::future ввод
Переместите конструкцию, присвоение перемещения, преобразовав конструкцию перемещения, и преобразовав присвоение перемещения std::shared_future ввод
Переместите конструктора и присвоение перемещения std::packaged_task ввод
Поскольку эти операции пересылки оставляют исходный объект в хорошо заданном состоянии, получение доступ к исходному объекту после вызывания этих функций совместимо с этим правилом.
Polyspace® повышает флаг, если исходный объект читается после того, как его содержимое перемещено в целевой объект путем вызова std::move функционируйте явным образом. Polyspace не отмечает доступ к исходному объекту если:
Исходный объект явной операции пересылки имеет эти типы:
std::unique_ptr
std::shared_ptr
std::weak_ptr
std::basic_ios
std::basic_filebuf
std::thread
std::unique_lock
std::shared_lock
std::promise
std::future
std::shared_future
std::packaged_task
Операция пересылки выполняется неявно. Например, функциональный std::remove может получить доступ к исходному объекту после неявной операции пересылки. Polyspace не отмечает его. Лучшая практика состоит в том, чтобы избежать таких операций и использовать более безопасные альтернативы, которые предотвращают случайный доступ, такой как std::erase.
Исходный объект имеет встроенный базовый тип, такой как: int, enum, float'double', указатель, std::intptr_t, std::nullptr_t.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
| Группа: Специальные функции членства |
| Категория: Необходимый, Частично автоматизированный |
[1] Конструктор преобразования является конструктором, который не объявляется со спецификатором explicit. Смотрите конструктора Преобразования.