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

异常类的拷贝、移动构造函数和析构函数均应是可访问的

7.15 ID_nonCopiableException
目录 › next › previous

如果异常类的拷贝、移动构造函数或析构函数不可访问,会使异常对象无法适用于完整的异常处理机制,导致意料之外的错误或降低可移植性。

示例:

auto f = async([]() {
    throw make_unique<string>("X");  // Non-compliant
});

try {
    f.get();
}
catch (unique_ptr<string>& e) {
    cout << *e << '\n';
}

例中不可复制的 unique_ptr 对象被抛出,是不符合要求的。

不同编译器对示例代码的处理方式可能存在较大差异,其运行情况可能正常,也可能会崩溃,抑或无法通过编译。

在异步过程中,需要将抛出的异常保存起来,回归同步时再重新抛出异常。某些执行环境需要通过复制来保存异常对象,如果复制接口不完备,可能会造成严重错误。

相关

ID_throwWhileThrowing

依据

ISO/IEC 14882:2003 15.1(5) ISO/IEC 14882:2011 15.1(5) ISO/IEC 14882:2017 18.1(5)
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.