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 подскажет развёрнутый ответ в реальном времени.