读书人

强错误安全

发布时间: 2012-05-21 18:04:41 作者: rapoo

强异常安全
对于标准容器而言,单个元素的插入操作是强异常安全的,而多个元素的插入操作则是基本异常安全的
什么是“强异常安全”:
什么是“基本异常安全”:
网上看到的解释是:
强异常安全:所有容器的操作都具有提交或回滚的语义
基本异常安全:容器总是可析构的
这两句话怎么理解呢

[解决办法]
回滚(rollback)是提交(submit)的反义词。提交就是提出一个请求,比如插入,删除。回滚就是撤销上次已经完成的操作。
析构是构造的反义词,对容器来说,就是将容器中的元素请空,释放申请的内存空间。
[解决办法]

探讨
回滚(rollback)是提交(submit)的反义词。提交就是提出一个请求,比如插入,删除。回滚就是撤销上次已经完成的操作。
析构是构造的反义词,对容器来说,就是将容器中的元素请空,释放申请的内存空间。

[解决办法]
>>强异常安全:所有容器的操作都具有提交或回滚的语义

在操作中发生异常,容易会回滚到操作之前的状态.
例如,一个容器有10个元素,现在插入100个元素,如果中途发生异常,那么容器会回归到操作之前的状态.最后结果保证container.size() == 10


>>基本异常安全:容器总是可析构的

意思就是,在操作中发生异常,容器状态发生改变且是正确的状态,因此可正确析构,但并不是最后预期的结果.
例如,一个容器有10个元素,插入100个元素,在插入过程中发生异常,最后容器中元素个数不能确定.也就是10 <= container.size() < 110

这两个异常的语义都保证容器在发生异常之后,其状态仍然有效.

读书人网 >C++

热点推荐