☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

判断 dynamic_cast 转换是否成功

12.17 ID_nullDerefDynamicCast
目录 › next › previous

dynamic_cast 转换指针失败会返回空指针,转换引用失败会抛出异常,如果不作判断则失去了使用 dynamic_cast 的意义。

示例:

void foo(A* a) {
    dynamic_cast<B*>(a)->foo();  // Non-compliant
}

应改为:

void foo(A* a) {
    if (auto* b = dynamic_cast<B*>(a)) {  // Compliant
        b->foo();
    }
}

使用 dynamic_cast 会产生一定的开销,如果不对其结果作判断,还不如使用 static_cast 等转换,但本规则集合不建议采用非 dynamic_cast 的动态类型转换,参见 ID_nonDynamicDownCast。

相关

ID_nonDynamicDownCast

依据

ISO/IEC 14882:2003 5.2.7(9) ISO/IEC 14882:2011 5.2.7(9)

参考

CWE-476 C++ Core Guidelines C.148
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.