Mediumsafetybest-practices
Какие практики безопасного C++ самые важные?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Топ практик безопасного C++ — использовать компилятор как помощника через type system и RAII.
// 1. RAII для всех ресурсов
auto p = std::make_unique<Widget>();
std::lock_guard<std::mutex> lk(mtx);
// 2. Правило нуля — члены-RAII
class Service { std::vector<Client> clients_; };
// 3. const correctness
size_t size() const { return n_; }
// 4. noexcept move/swap (иначе STL fallback на copy)
Vector(Vector&&) noexcept;
// 5. override, [[nodiscard]], static_assert
void foo() override;
[[nodiscard]] int compute();
static_assert(sizeof(T) <= 16);Также: избегать raw new/delete, C-array, C-cast, макросов; sanitizer-ы в CI (ASan, UBSan, TSan); -Werror; статический анализ (clang-tidy, PVS-Studio); C++20 features (concepts, ranges, modules).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.