Easybad-alloc

Что такое std::bad_alloc и когда бросается?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

`std::bad_alloc` бросается оператором new, когда не может выделить память. Альтернатива — nothrow new, возвращающий nullptr.

// По умолчанию new бросает bad_alloc
try {
    auto p = new HugeStruct[1'000'000'000];
} catch (const std::bad_alloc& e) {
    std::cerr << e.what();   // std::bad_alloc
}

// nothrow — возвращает nullptr (для embedded / без исключений)
auto p = new (std::nothrow) HugeStruct[1'000'000'000];
if (!p) { /* обработать нехватку памяти */ }

Можно установить std::set_new_handler — функцию, вызываемую при неудаче (может освободить кэш и retry).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.