【发布时间】:2012-08-14 10:55:03
【问题描述】:
在 Herb Sutter 的书 Exceptional C++ (1999) 中,他在第 10 项的解决方案中有一句话:
“异常不安全”和“糟糕的设计”齐头并进。如果一段代码不是异常安全的,那通常没关系,可以简单地修复。但是,如果一段代码由于其底层设计而不能成为异常安全的,那几乎总是表明其设计不佳。
示例 1:具有两种不同职责的函数很难使异常安全。
示例 2:以必须检查自赋值的方式编写的复制赋值运算符可能也不是强异常安全
他所说的“检查自我分配”是什么意思?
[查询]
Dave 和 AndreyT 准确地向我们展示了“检查自我分配”的含义。那挺好的。但问题还没有结束。为什么“检查自我分配”会损害“异常安全”(根据 Hurb Sutter 的说法)?如果调用者尝试进行自分配,则该“检查”就像没有发生分配一样工作。真的很痛吗?
[MEMO 1] 在 Herb 书中后面的第 38 条对象身份中,他解释了自我分配。
【问题讨论】:
-
“以这样的方式必须”这里最重要的词是:必须
标签: c++ exception-handling assignment-operator exception-safety