Обработка исключений, связанных с выделением памяти |
Как было показано в листинге 2.2, поскольку сборщик мусора не меняет способ выделения памяти с помощью операции new, вы должны обрабатывать сбои, возникающие при выделении памяти, как обычно, с помощью исключения bad_alioc (это исключение генерируется, когда операция new выполняется с ошибкой). Конечно, программа листинга 2.2 не вышла бы за пределы доступной памяти и блок try/catch ей на самом деле не нужен, но реальные приложения могут исчерпать память из хип-области. Следовательно, вы должны учитывать такую возможность и включать соответствующую проверку в ваши приложения. Как правило, лучшая реакция на возникшее исключение bad_alloc при использовании сбора мусора — вызов функции collect о для очистки любой неиспользуемой памяти и повторная попытка выделения памяти. Этот технический прием применяется в программе тестирования на загрузку (load-testing program), приведенной далее в этой главе. Вы тоже можете его использовать в своих приложениях.
|