我最近开始欣赏复制和交换习惯用法,并且一直用它来为管理资源的任何类实现复制赋值。所以它让我思考标准库类型:标准是否保证了异常安全行为?
例如,考虑一个包含一个std::string
数据成员的类。通常情况下,我不会实施自己的副本分配等,但这样安全吗?如果复制分配失败,标准是否保证std::string
数据成员保持不变?在这种情况下实施复制和交换是否有益 - 或者这只是走得太远了?
答案 0 :(得分:2)
该标准在'经文'21.4.1.2中明确规定。除std::bad_length
之外的任何其他例外都不会产生任何影响“。
答案 1 :(得分:1)
std :: string的复制赋值抛出的唯一原因是动态分配失败,在这种情况下你(可以说)完全搞砸了。标准库是 C ++设计的示例,我不认为他们会忽略这样的事情。我不会去检查标准类型。