C++异常安全三级别详解
请解释C++异常安全的三个级别:基本保证、强保证和nothrow保证,并给出实现策略。
回答
我是大山
三个级别由强到弱:
-
Noexcept保证(no-throw):函数绝不抛出异常,使用
noexcept关键字声明。示例:析构函数、swap操作、移动构造函数。void swap(T& other) noexcept { /* 交换指针,不抛异常 */ } -
强保证(strong):操作要么成功,要么回滚到初始状态,无副作用。示例:使用copy-and-swap。
T& operator=(const T& other) { T temp(other); // 拷贝可能失败 swap(temp); // noexcept swap return *this; } -
基本保证(basic):操作失败时不泄漏资源,对象保持有效但状态不确定。
实现策略:RAII管理资源、copy-and-swap、避免在已修改状态下抛出异常。