Почему «Потенциальная утечка памяти, указанная полем» на заводской справочной таблице - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь реализовать фабрику, которая создает новые экземпляры типов, унаследованных от общего базового класса Поле .

Фабрика моделируется как справочная таблица к заводским функциям, которые возвращают 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 ); }}

Может кто-нибудь сказать мне, что здесь видит лязг?

...