Для представления исключительного права собственности используется std::unique_ptr
Для представления исключительного права собственности используется std::unique_ptr.
Необработанные указатели на кучу памяти имеют две связанные проблемы:
Когда необработанный указатель выходит из области действия, указанная память может не быть освобождена и привести к утечке памяти. Не забудьте явно освободить память (delete указатель), прежде чем указатель выйдет из области действия.
При передаче необработанного указателя на функцию неясно, принимает ли функция исключительную собственность на указанный ресурс и может ли она освободить память или должна оставить удаление вызывающей стороне. Если функция освобождает память, существует риск того, что другой указатель, указывающий на ту же самую ячейку памяти, останется зависшим.
A std::unique_ptr объект является интеллектуальным указателем, который решает обе задачи и не требует значительных дополнительных накладных расходов над необработанными указателями:
Нет необходимости явно освобождать указанную память. Память освобождается, прежде чем указатель выходит из области.
Указатель имеет исключительную собственность на указанный объект. При передаче указателя на функцию с помощью операции перемещения функция принимает на себя право собственности на память через указатель и неявно освобождает память при завершении (если только вы не передаете право собственности другой функции).
Флаги средства проверки выполняют функции, отличные от main которые имеют необработанные указатели в качестве параметров или возвращаемых значений.
Шашка поднимает нарушение как этого правила, так и AUTOSAR C++14 Rule A20-8-3.
Если требуется, чтобы функция приобрела исключительную собственность на указанный объект, преобразуйте необработанный указатель в std::unique_ptr тип.
Если требуется, чтобы функция приобрела общее владение указанным объектом, преобразуйте необработанный указатель в std::shared_ptr тип.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Библиотека общих утилит |
| Категория: Обязательно, Автоматизировано |