Для представления долевого владения используется 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 тип.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
| Группа: Библиотека общих утилит |
| Категория: Необходимый, Автоматизированный |