我正在尝试实现一个工厂,该工厂创建由公共基类 Field 继承的类型的新实例。
将工厂建模为工厂函数的查找表,该函数返回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 ); }}
谁能告诉我在这里看到的叮当声?