Um verificador estático para encontrar erros de ponteiro inteligente em programas C ++
Um verificador de estilo de codificação estática para detectar os usos de API de ponteiros inteligentes C ++ que provavelmente levarão a erros de memória como vazamento de memória, uso após livre e duplo livre.
Relatório um argumento do modelo auto_ptr usado em um contêiner STL.
std::vector<std::auto_ptr< int >> vi;
^
Warn here Relate toda a transferência de memória de um auto_ptr para outro.
std::auto_ptr< int > p1 ( new int ( 42 ));
void foo (std::auto_ptr< int > p);
foo (p1);
^
Warn here Relate a operação que delete o ponteiro dos observadores de ponteiro inteligente.
std::unique_ptr< int > p = std::make_unique< int >( 42 );
delete p.get();
^
Warn hereRelate as iniciações com memória não alocada.
int I;
std::unique_ptr< int > p (&I);
^
Warn here Relate um campo privado auto_ptr em uma classe sem construtores de cópias e operadores de atribuição.
class Type {
private:
std::auto_ptr< int > p;
^
Warn here
};Relate a construção de um ponteiro inteligente com uma variável de ponteiro bruto.
void foo ( int *p) {
std::unique_ptr< int > sp (p);
^
Warn here
} Relate o tipo incompatível de argumento de modelo e new operador para construções de ponteiros inteligentes.
std::auto_ptr< int > sp ( new int [ 42 ]);
^
Warn here Relate os usos de weak_ptr bloqueados desmarcados.
std::weak_ptr< int > wp;
...
*wp.lock() = 42 ;
^
Warn here Relate o ponteiro da release D que não são negociados.
std::unique_ptr< int > sp;
...
*sp.release() = 42 ;
^
Warn hereClang-tidy com Sprinter (SHA256SUM 2C237C9A7E280F91D705ED6E16189C0A63B17643F09F3E233B2F7E6ECC712272)
Entre em contato conosco se precisar do código -fonte.
smartpointersafety- para todos os padrões de erro mencionados acima.Por exemplo
$ clang-tidy -checks= ' -*,smartpointersafety-* ' source.cpp