CodeQL 文档

抛出指针

ID: cpp/throwing-pointer
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - efficiency
   - correctness
   - exceptions
Query suites:
   - cpp-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

由于 C++ 不是垃圾回收语言,因此异常不应该动态分配。动态分配异常会给每个 catch 站点带来内存释放的负担。

作为一种特殊情况,允许抛出任何从 Microsoft MFC 的 CException 类派生的指针。这是出于历史原因;现代代码和现代框架不应抛出指针值。

建议

应删除 throw 关键字后面的 new 关键字。任何以前捕获该指针的 catch 站点应改为按引用或 const 引用捕获。

示例

void bad() {
  throw new std::exception("This is how not to throw an exception");
}

void good() {
  throw std::exception("This is how to throw an exception");
}

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私