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

移动构造函数和移动赋值运算符不可抛出异常

7.11 ID_throwInMove
目录 › next › previous

在移动过程中,对象的状态是不完整的,如果在中途抛出异常,对象将处于错误的状态。

示例:

struct A {
    A();
    A(A&& a) noexcept;  // Compliant
    ....
};

struct B: A {
    B();
    B(B&& b): A(move(b)) {
        if (cond) {
            throw Exception();   // Non-compliant
        }
        ....
    }
};

例中 B 的移动构造函数抛出异常时,基类对象的数据已被转移,被移动的对象将处于错误的状态。

相关

ID_throwInSwap

参考

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