Статическая проверка для поиска ошибок с интеллектуальным указателем в программах C ++
Статическая проверка стиля кодирования для обнаружения ошибок API интеллектуальных указателей C ++, которые, вероятно, приведут к ошибкам памяти, таким как утечка памяти, использование бесплатных и двойных свободных.
Сообщите о аргументе шаблона auto_ptr , используемом в контейнере STL.
std::vector<std::auto_ptr< int >> vi;
^
Warn here Сообщите всю передачу памяти от одного auto_ptr в другой.
std::auto_ptr< int > p1 ( new int ( 42 ));
void foo (std::auto_ptr< int > p);
foo (p1);
^
Warn here Сообщите о операции, которая delete указатель от Smart Pointer Sabservers.
std::unique_ptr< int > p = std::make_unique< int >( 42 );
delete p.get();
^
Warn hereСообщите о посвящениях с непланированной памятью.
int I;
std::unique_ptr< int > p (&I);
^
Warn here Сообщите о частном поле auto_ptr в классе без конструкторов копирования и операторов назначения.
class Type {
private:
std::auto_ptr< int > p;
^
Warn here
};Сообщите о строительстве умного указателя с помощью необработанной переменной указателя.
void foo ( int *p) {
std::unique_ptr< int > sp (p);
^
Warn here
} Сообщите о несоответствующем аргументе шаблонов и new оператор для конструкций Smart Pointer.
std::auto_ptr< int > sp ( new int [ 42 ]);
^
Warn here Сообщите об использовании неконтролируемых заблокированных weak_ptr S.
std::weak_ptr< int > wp;
...
*wp.lock() = 42 ;
^
Warn here Сообщите указатель release D, который не подвергается решению.
std::unique_ptr< int > sp;
...
*sp.release() = 42 ;
^
Warn hereClang-Tidy с Sprinter (SHA256SUM 2C237C9A7E280F91D705ED6E16189C0A63B17643F09F3E233B2F7E6ECC712272)
Пожалуйста, свяжитесь с нами, если вам нужен исходный код.
smartpointersafety- для всех шаблонов ошибок, упомянутых выше.Например
$ clang-tidy -checks= ' -*,smartpointersafety-* ' source.cpp