Pemeriksa statis untuk menemukan kesalahan penunjuk pintar di program C ++
Pemeriksa gaya pengkodean statis untuk mendeteksi penyalahgunaan API dari C ++ Smart Pointer yang mungkin akan menyebabkan kesalahan memori seperti kebocoran memori, gunakan setelah gratis, dan bebas ganda.
Laporkan argumen template auto_ptr yang digunakan dalam wadah STL.
std::vector<std::auto_ptr< int >> vi;
^
Warn here Laporkan semua transfer memori dari satu auto_ptr ke yang lain.
std::auto_ptr< int > p1 ( new int ( 42 ));
void foo (std::auto_ptr< int > p);
foo (p1);
^
Warn here Laporkan operasi yang delete s penunjuk dari pengamat pointer pintar.
std::unique_ptr< int > p = std::make_unique< int >( 42 );
delete p.get();
^
Warn hereLaporkan inisiasi dengan memori yang tidak dialokasikan.
int I;
std::unique_ptr< int > p (&I);
^
Warn here Laporkan bidang auto_ptr pribadi di kelas tanpa konstruktor salinan dan operator penugasan.
class Type {
private:
std::auto_ptr< int > p;
^
Warn here
};Laporkan pembangunan pointer pintar dengan variabel pointer mentah.
void foo ( int *p) {
std::unique_ptr< int > sp (p);
^
Warn here
} Laporkan jenis argumen template yang tidak cocok dan operator new untuk konstruksi pointer pintar.
std::auto_ptr< int > sp ( new int [ 42 ]);
^
Warn here Laporkan penggunaan weak_ptr terkunci yang tidak dicentang s.
std::weak_ptr< int > wp;
...
*wp.lock() = 42 ;
^
Warn here Laporkan release D pointer yang tidak dialokasikan.
std::unique_ptr< int > sp;
...
*sp.release() = 42 ;
^
Warn hereClang-ridy dengan sprinter (SHA256SUM 2C237C9A7E280F91D705ED6E16189C0A63B17643F09F3E233B2F7E6ECC712272)
Silakan hubungi kami jika Anda memerlukan kode sumber.
smartpointersafety- untuk semua pola kesalahan yang disebutkan di atas.Misalnya
$ clang-tidy -checks= ' -*,smartpointersafety-* ' source.cpp