Причина, по которой большинство людей не обрабатывают исключение bad_alloc
в явном виде, заключается в том, что большую часть времени не так много, что большинство пользовательских приложений могут сделать для восстановления из-за нехватки памяти, поэтому наиболее разумным является использование исключения, распространяющегося наружу. вещь которую нужно сделать. Вы должны явно перехватывать исключение только при наличии разумного действия по восстановлению, которое вы можете выполнить.
В некоторых случаях может иметь смысл перехватить исключение std::bad_alloc
, например, если программа может попытаться использовать альтернативный подход при неудачном выделении большого блока памяти. Это применимо только в некоторых системах; в системе, которая перегружает память, умозрительно выделяя большой блок памяти и ожидая, что std::bad_alloc
завершится неудачей.
Явный перехват bad_alloc
для выполнения очистки обычно является признаком того, что ресурсы не управляются соответствующими экземплярами классов в стиле RAII, которые должны выполнять правильную очистку в деструкторе, гарантируя, что это происходит всякий раз, когда Область действия оставлена, по какому-либо исключению или иным образом.