Строгая гарантия исключений (strong exception guarantee) означает, что в случае выброса исключения состояние программы остается неизменным (rollback) по отношению к началу операции, либо операция успешно завершается. Иначе говоря, если операция не смогла завершиться успешно, то она гарантирует откат всех произведенных изменений.
Для обеспечения строгой гарантии часто используют идиому "копирование и обмен" (copy-and-swap):
Пример:
c
В этом примере, если при создании temp произойдет исключение, исходный объект *this останется нетронутым (сохраняется строгая гарантия). Обмен std::swap(data_, temp.data_) обычно является noexcept, поскольку он просто меняет указатели или другие внутренние ресурсы векторов без возможности выброса исключения.
Применение:
Строгая гарантия наиболее сложна в реализации, но обеспечивает наибольшую устойчивость программы к исключениям.