Исключительная ситуация, генерируемая оператором new
Следует отметить, что некоторые компиляторы поддерживают генерацию
исключений в случае ошибки выделения памяти посредством оператора new, в частности исключения типа bad_alloc. Оно может быть перехвачено и необходимым образом обработано. Ниже в программе рассмотрен пример генерации и обработки исключительной ситуаций bad_alloc. Искусственно вызывается ошибка выделения памяти и перехватывается исключительная ситуация.
#include <new>
#include <iostream>
using namespace std;
int main()
{ double *p;
try{
while(1) p=new double[100]; // генерация ошибки выделения памяти
}
catch(bad_alloc exept) { // обработчик xalloc
cout<<"Возникло исключение"<<exept.what()<<endl;
}
return 0;
}
В случае если компилятором не генерируется исключение bad_alloc, то
можно это исключение создать искусственно:
#include <new>
#include <iostream>
using namespace std;
int main()
{ double *p;
bad_alloc exept;
try{
if(!(p=new double[100000000])) // память не выделена p==NULL
throw exept; // генерация ошибки выделения памяти
}
catch(bad_alloc exept) { // обработчик bad_alloc
cout<<"Возникло исключение "<<exept.what()<<endl;
}
return 0;
}
Результатом работы программы будет сообщение:
Возникло исключение bad allocation
Оператор new появился в языке C++ еще до того, как был введен механизм обработки исключительных ситуаций, поэтому первоначально в случае ошибки выделения памяти этот оператор просто возвращал NULL.
Дата добавления: 2015-12-21; просмотров: 18; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!