Un verificador estático para encontrar errores inteligentes de puntero en los programas de C ++
Un verificador de estilo de codificación estática para detectar los usos erróneos de la API de los punteros inteligentes C ++ que probablemente conducirán a errores de memoria como la fuga de memoria, se usa después de gratis y doble gratis.
Informe un argumento de plantilla auto_ptr utilizado en un contenedor STL.
std::vector<std::auto_ptr< int >> vi;
^
Warn here Informe toda la transferencia de memoria de un auto_ptr a otro.
std::auto_ptr< int > p1 ( new int ( 42 ));
void foo (std::auto_ptr< int > p);
foo (p1);
^
Warn here Informe la operación que delete el puntero de los observadores de puntero inteligente.
std::unique_ptr< int > p = std::make_unique< int >( 42 );
delete p.get();
^
Warn hereInforme las iniciaciones con memoria no asignada.
int I;
std::unique_ptr< int > p (&I);
^
Warn here Informe un campo privado auto_ptr en una clase sin constructores de copias y operadores de asignación.
class Type {
private:
std::auto_ptr< int > p;
^
Warn here
};Informe la construcción de un puntero inteligente con una variable de puntero RAW.
void foo ( int *p) {
std::unique_ptr< int > sp (p);
^
Warn here
} Informe el tipo de argumento de plantilla no coincidente y new operador para las construcciones de puntero inteligente.
std::auto_ptr< int > sp ( new int [ 42 ]);
^
Warn here Informe los usos de weak_ptr bloqueados sin control s.
std::weak_ptr< int > wp;
...
*wp.lock() = 42 ;
^
Warn here Informe el puntero release D que no se desaconseja.
std::unique_ptr< int > sp;
...
*sp.release() = 42 ;
^
Warn hereClang-tidy con sprinter (Sha256sum 2C237C9A7E280F91D705ED6E16189C0A63B17643F09F3E233B2F7E6ECC712272))
Póngase en contacto con nosotros si necesita el código fuente.
smartpointersafety- prefijo para todos los patrones de error mencionados anteriormente.P.ej
$ clang-tidy -checks= ' -*,smartpointersafety-* ' source.cpp