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