Класс bad_alloc
Класс bad_alloc представляет собой
исключение, которое выбрасывается при
неудачной попытке выделения динамической
памяти. Оно наследуется от класса
exception и находится в заголовочном
файле <new>.
Когда оператор new или
new[] не может выделить запрошенный
объем памяти, он выбрасывает исключение
bad_alloc. Это позволяет программе
корректно обработать ситуацию нехватки
памяти вместо аварийного завершения.
Класс не имеет собственных параметров,
однако наследует метод what от
базового класса exception, который
возвращает строку с описанием ошибки.
Синтаксис
#include <new>
class bad_alloc : public exception
{
// ...
};
Пример
Давайте попробуем выделить огромный
объем памяти и перехватим исключение
bad_alloc:
#include <iostream>
#include <new>
using namespace std;
int main()
{
try
{
long long size = 1000000000000LL;
int* arr = new int[size];
delete[] arr;
}
catch (bad_alloc& e)
{
cout << "Caught: " << e.what() << endl;
}
return 0;
}
Результат выполнения кода:
"Caught: std::bad_alloc"
Пример
Давайте используем версию оператора
new, которая не выбрасывает
исключение, а возвращает nullptr
при неудаче:
#include <iostream>
#include <new>
using namespace std;
int main()
{
long long size = 1000000000000LL;
int* arr = new (nothrow) int[size];
if (arr == nullptr)
{
cout << "Allocation failed" << endl;
}
else
{
cout << "Allocation ok" << endl;
delete[] arr;
}
return 0;
}
Результат выполнения кода:
"Allocation failed"