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