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