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

捕获异常时不应产生对象切片问题

7.20 ID_catch_slicing
目录 › next › previous

通过值捕获多态类的异常对象会使其多态性失效,使异常被错误处理。

本规则是 ID_catch_value 与 ID_objectSlicing 的特化。

示例:

struct Exception {
    virtual const char* what() const { return nullptr; }
};

struct Error: public Exception {
    const char* what() const override { return "error"; }
};

void foo() {
    try {
        throw Error();
    }
    catch (Exception e) {   // Non-compliant, use reference instead
        log(e.what());      // Only returns nullptr
    }
}

例中抛出的是派生类对象,但 what 函数只能返回 nullptr。

相关

ID_catch_value ID_objectSlicing

参考

C++ Core Guidelines C.145 C++ Core Guidelines ES.63
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.