#memory-leaks #c 17 #static-analysis
#утечки памяти #c 17 #статический анализ
Вопрос:
Я пытаюсь реализовать фабрику, которая создает новые экземпляры типов, унаследованных общим полем базового класса.
Фабрика моделируется как поисковая таблица для заводских функций, которые возвращают unique_ptr. Ключевым типом справочной таблицы является string_view .
В заводских функциях я вызываю make_unique для запрошенного типа.
clang-анализатор жалуется на потенциальную утечку памяти при возврате unique_ptr.
Таблица поиска фабрики с единственной доступной записью фабрики.
using FieldFactory = std::function< std::unique_ptr< Field >( node constamp;, Clf constamp; ) >;
static const std::unordered_map< std::string_view, FieldFactory > fieldFactoryLut = {
{"static-text"sv, []( auto constamp; node, auto constamp; parent ) { return std::make_unique< StaticTextField >( node, parent ); }}
};
Использование
auto constamp; 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 constamp; node, auto constamp; parent ) { return std::make_unique< StaticTextField >( node, parent ); }}
Кто-нибудь может сказать мне, что здесь видит clang?
Комментарии:
1. Какую версию clang вы используете? Я не смог воспроизвести это с версиями 7 или 8. Можете ли вы предоставить ссылку на godbolt?
2. Я запустил scan-build-7, который поставляется с clang 7.0.0.3