例外安全:非交换的好处

时间:2013-01-27 13:14:22

标签: c++ exception swap

如果某个类型具有无法失败的交换功能,则可以使其他功能更容易提供strong exception safety guarantee。这是因为我们可以先完成所有函数的工作,这些工作可能会“失败”,然后使用非投掷交换来提交工作。

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

例如,是否存在无故障交换的存在使得其他功能更容易提供基本保证?

1 个答案:

答案 0 :(得分:0)

让我说我这样做:

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

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