Mediumисключения
Что такое strong/weak/no-throw exception guarantee?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Уровни гарантий безопасности исключений определяют состояние объекта при выбросе исключения.
// 1. No-throw (noexcept) — не бросает
~Widget() noexcept; // деструкторы всегда noexcept
// 2. Strong (commit-or-rollback) — откат к исходному состоянию
// vector::push_back даёт strong, если move noexcept
v.push_back(x); // при исключении v остался прежним
// 3. Basic — объект валиден, не утечка, но состояние может измениться
// 4. No guarantee- No-throw — noexcept; обязательно для деструкторов и deallocation;
- Strong — состояние как до операции (важно для публичных операций);
- Basic — валидное состояние, нет утечек, но не обязательно прежнее.
STL: если move-конструктор noexcept, vector при reallocation использует move (strong, быстро), иначе copy (strong, дороже).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.