Перейти к содержимому
Модуль 6

Обработка ошибок и безопасность

Пишите надёжный код на C++ с правильной обработкой ошибок — исключения, гарантии безопасности RAII, типы-суммы и паттерны защитного программирования.

Исключения и стратегии обработки ошибок

  1. Исключения: throw, try, catch

    Разберитесь в механизме исключений C++ — раскрутка стека, стандартная иерархия исключений, пользовательские исключения и когда предпочтительнее исключения по сравнению с кодами ошибок.

  2. Гарантии безопасности исключений

    Изучите три уровня безопасности исключений — базовый, строгий и без выбрасывания — и как RAII и copy-and-swap их обеспечивают.

  3. Стратегии обработки ошибок: выбор правильного подхода

    Сравните исключения, коды ошибок и std::expected — узнайте, когда какой подход уместен и как обрабатывать ошибки в конструкторах, деструкторах и многопоточном коде.

Типобезопасность и защитное программирование

  1. std::optional, std::variant и std::expected

    Используйте типы-суммы C++17/23 для представления nullable-значений, типобезопасных объединений и возвратов «значение или ошибка» — устраняя целые классы ошибок во время компиляции.

  2. Типобезопасность, утверждения и контракты

    Используйте систему типов C++ для предотвращения ошибок во время компиляции — строгие перечисления, паттерн newtype, static_assert, утверждения времени выполнения и предстоящая возможность контрактов.

  3. Понимание и избежание неопределённого поведения

    Узнайте, что такое неопределённое поведение, зачем оно существует, как компиляторы используют его для оптимизации, и как обнаруживать его с помощью санитайзеров и предупреждений компилятора.