ตัวตรวจสอบแบบคงที่สำหรับการค้นหาข้อผิดพลาดตัวชี้อัจฉริยะในโปรแกรม C ++
ตัวตรวจสอบรูปแบบการเข้ารหัสแบบคงที่สำหรับการตรวจจับ API Misuses ของตัวชี้อัจฉริยะ 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 ตัวชี้จากผู้สังเกตการณ์ตัวชี้อัจฉริยะ
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 Constructions
std::auto_ptr< int > sp ( new int [ 42 ]);
^
Warn here รายงานประเพณีของการล็อคที่ไม่ถูกตรวจสอบ weak_ptr s
std::weak_ptr< int > wp;
...
*wp.lock() = 42 ;
^
Warn here รายงานตัวชี้ release ที่ไม่ได้รับการจัดการ
std::unique_ptr< int > sp;
...
*sp.release() = 42 ;
^
Warn hereClang-Tidy พร้อม Sprinter (SHA256SUM 2C237C9A7E280F91D705ED6E16189C0A63B17643F09F3E2333B2F7E6ECC712272)
โปรดติดต่อเราหากคุณต้องการซอร์สโค้ด
smartpointersafety- สำหรับรูปแบบข้อผิดพลาดทั้งหมดที่กล่าวถึงข้างต้นเช่น
$ clang-tidy -checks= ' -*,smartpointersafety-* ' source.cpp