Утечка памяти при использовании std::unique_ptr возможна в следующих случаях:
Некорректное использование собственной реализации удалителя (Deleter):
Если пользовательский удалитель не освобождает выделенный ресурс должным образом (например, вызывает delete вместо delete[] для массива или не вызывает соответствующую функцию освобождения ресурса).
cpp
Передача сырого указателя из unique_ptr в функцию, которая затем принимает владение им и не освобождает:
Передача владения должна выполняться явно с помощью std::move. Если вы передаете get() или сырой указатель, а затем не заботитесь об освобождении в другом месте, это может привести к утечке.
cpp
Исправленный пример с потенциальной утечкой (если передаем владение, но функция не удаляет):
cpp
Исключения между выделением памяти и оборачиванием в unique_ptr:
Несмотря на то, что std::make_unique предотвращает это, прямое использование new с последующим конструктором unique_ptr может привести к утечке, если между ними возникнет исключение.
cpp
В целом, утечка памяти при корректном использовании std::unique_ptr крайне маловероятна, поскольку его основная цель — автоматическое управление ресурсами, предотвращая утечки в типичных сценариях. Проблемы возникают при выходе за рамки его стандартного использования (собственные удалители, release(), взаимодействие с сырыми указателями).