c ++中容器的异常安全

时间:2016-02-05 09:02:16

标签: c++ c++11 exception exception-handling exception-safety

我遇到了这个术语的容器异常安全问题。我想了解什么是异常安全意味着什么? 对于不同的容器,这是否有任何比较?

1 个答案:

答案 0 :(得分:1)

如果查看各种数据结构的算法,可以看到它们涉及一系列步骤。数据结构在步骤开始时和结束时具有一些完整性(一致的内部含义)。

例如,考虑vector,其中涉及dynamically growing array。这通常涉及一个数组,一个描述数组大小的整数,以及一个描述已使用元素数的整数。插入元素时,可能会分配一个大小为两倍的新数组,复制到新数组的元素,描述大小的整数将乘以2,描述已使用元素数的整数将增加1,等等

此时抛出的异常(例如,通过元素的复制构造函数)可以导致在中间终止一系列步骤。例如,如果您不小心首先更新整数,只进行分配和复制(并且不捕获异常),那么数据结构将失去其内部一致性。

STL容器的异常安全性的含义是,它们保证这种终止会使数据结构保持一致状态。