Я пытаюсь реализовать фабрику, которая создает новые экземпляры типов, унаследованных от общего базового класса Поле .
Фабрика моделируется как справочная таблица к заводским функциям, которые возвращают unique_ptr. Тип ключа таблицы соответствия - string_view.
Внутри заводских функций я вызываю make_unique для запрошенного типа.
clang-analyzer жалуется на возможную утечку памяти при возврате unique_ptr.
Заводская справочная таблица с единственной доступной заводской записью.
using FieldFactory = std::function< std::unique_ptr< Field >( node const&, Clf const& ) >;
static const std::unordered_map< std::string_view, FieldFactory > fieldFactoryLut = {
{"static-text"sv, []( auto const& node, auto const& parent ) { return std::make_unique< StaticTextField >( node, parent ); }}
};
Использование
auto const& factoryFun = fieldFactoryLut.at("static-text"sv);
auto uPtr = factoryFun(node, clf);
При вызове make_unique я не ожидаю возможной утечки памяти, но clang-analyzer утверждает:
warning: Potential leak of memory pointed to by field '_M_head_impl' [clang-analyzer-cplusplus.NewDeleteLeaks]
[build] {"static-text"sv, []( auto const& node, auto const& parent ) { return std::make_unique< StaticTextField >( node, parent ); }}
Может кто-нибудь сказать мне, что здесь видит лязг?