strong exception guarantee。

例外処理(C++)において、操作の途中で例外が発生しても、プログラム状態が変更されないことを保証する性質。

概要

強い例外保証を満たす操作は、

  • 成功すれば変更が反映される
  • 失敗して例外が発生した場合は、何も変更されなかったかのような状態に戻る

という振る舞いをする。

これはしばしば「all or nothing」と表現される。

コピー操作は、失敗しても元オブジェクトを通常変更しないため、強い例外保証を満たしやすい。

一方、ムーブは資源の所有権を移すため、途中で例外が発生すると元オブジェクトが変更済みになることがある。

そのため、ムーブ操作で強い例外保証を保つには、ムーブが失敗しないこと、すなわちnoexceptであることが重要になる。

関連

参考