3

如果一个类型有一个不能失败的交换函数,这可以更容易地为其他函数提供强大的异常安全保证。这是因为我们可以首先完成函数的所有可能“偏向一边”失败的工作,然后使用非抛出交换来提交工作。

但是,保证交换永远不会失败还有其他好处吗?

例如,是否存在这样的情况,即无失败交换的存在使得另一个函数更容易提供基本保证?

4

1 回答 1

0

假设我这样做:

class C {
  T a, b;  // invariant: a > b
  void swap(C& other);
};

如果 T::swap(T&) 可能抛出,似乎没有办法在基本保证的情况下实现 C::swap() 。我必须添加一个间接级别并存储 T* 而不是 T。

于 2013-02-05T02:13:19.153 回答