, also known as the Abrahams guarantees
after David Abrahams
who formalized the guidelines, are a set of contractual guidelines that class library implementors and clients use when reasoning about exception safety
The rules apply to class implementations (components) in the presence of exceptions; they are as follows:
- The basic guarantee: that the invariants of the component are preserved, and no resources are leaked.
- The strong guarantee: that the operation has either completed successfully or thrown an exception, leaving the program state exactly as it was before the operation started.
- The no-throw guarantee: that the operation will not throw an exception.
Code that doesn't follow one of the above rules is called exception unsafe.