C ++标准库类型是否实现了异常安全的副本分配?

时间:2010-11-19 21:22:43

标签: c++ exception stl

我最近开始欣赏复制和交换习惯用法,并且一直用它来为管理资源的任何类实现复制赋值。所以它让我思考标准库类型:标准是否保证了异常安全行为?

例如,考虑一个包含一个std::string数据成员的类。通常情况下,我不会实施自己的副本分配等,但这样安全吗?如果复制分配失败,标准是否保证std::string数据成员保持不变?在这种情况下实施复制和交换是否有益 - 或者这只是走得太远了?

2 个答案:

答案 0 :(得分:2)

该标准在'经文'21.4.1.2中明确规定。除std::bad_length之外的任何其他例外都不会产生任何影响“。

答案 1 :(得分:1)

std :: string的复制赋值抛出的唯一原因是动态分配失败,在这种情况下你(可以说)完全搞砸了。标准库是 C ++设计的示例,我不认为他们会忽略这样的事情。我不会去检查标准类型。