C++ 异常安全与代码复杂度解析
1. C++ 标准库的异常安全性
在 C++ 编程中,异常安全性是一个至关重要的概念。标准库容器和迭代器在异常处理方面有着特定的规则。
- 基本保证 :所有标准容器的操作都要实现基本保证,即容器始终可销毁,即使出现异常,也能保持一致(不一定可预测)的状态。为实现这一点,一些重要函数需实现不抛出异常的保证,例如
swap、allocator<T>::deallocate以及模板参数类型的某些操作(特别是析构函数)。 - 强保证 :除了两个例外情况,所有标准容器的操作都要实现强保证,即具有提交或回滚语义。插入操作要么完全成功,要么程序状态完全不变,失败操作不会影响容器中已有迭代器的有效性。
- 例外情况 :
- 所有容器的多元素插入(“迭代器范围”插入)并非强异常安全。
- 对于
vector<T>和deque<T>,只有当T的复制构造函数和赋值运算符不抛出异常时,插入和删除操作才是强异常安全的。例如,向vector<string>或vector<vector<int>>中插入或删除元素并非强异常安全。
- 例外情况 :
超级会员免费看
订阅专栏 解锁全文
11万+

被折叠的 条评论
为什么被折叠?



