如果某个类型具有无法失败的交换功能,则可以使其他功能更容易提供strong exception safety guarantee。这是因为我们可以先完成所有函数的工作,这些工作可能会“失败”,然后使用非投掷交换来提交工作。
但是,保证交换永远不会失败还有其他好处吗?
例如,是否存在无故障交换的存在使得其他功能更容易提供基本保证?
答案 0 :(得分:0)
让我说我这样做:
class C {
T a, b; // invariant: a > b
void swap(C& other);
};
如果T :: swap(T&)可能抛出,似乎没有办法实现具有基本保证的C :: swap()。我必须添加一个间接级别并存储T *而不是T。