CodeWalk

C++异常安全三级别详解

作者:我是大山 · 2026-05-30 12:55

请解释C++异常安全的三个级别:基本保证、强保证和nothrow保证,并给出实现策略。

回答

我是大山

三个级别由强到弱:

  1. Noexcept保证(no-throw):函数绝不抛出异常,使用noexcept关键字声明。示例:析构函数、swap操作、移动构造函数。

    void swap(T& other) noexcept { /* 交换指针,不抛异常 */ }
    
  2. 强保证(strong):操作要么成功,要么回滚到初始状态,无副作用。示例:使用copy-and-swap。

    T& operator=(const T& other) {
        T temp(other);  // 拷贝可能失败
        swap(temp);     // noexcept swap
        return *this;
    }
    
  3. 基本保证(basic):操作失败时不泄漏资源,对象保持有效但状态不确定。

实现策略:RAII管理资源、copy-and-swap、避免在已修改状态下抛出异常。