class bad_expection: public exception{};
кўринишида аниқланган бўлиб, у unexpected_handler томонидан юзага келтирилиши мумкин бўлган истисноларни тавсифлайди.
Кутилмаган истистнони қайта ишлашга мисол келтирамиз:
#include
#include
using namespace std;
//Istisno yuzaga keltirmaydigan funksiya
void f() throw()
{
// Kutilmagan istisnoni yuzaga keltirish
throw "Kutilmagan istisno!";
}
void Shaxsiy_Qayta_Ishlovchi()
{
cout<<"Kutilmagan istisnoni qayta ishlandi!";
exit(-1);
}
int main()
{
set_unexpected(Shaxsiy_Qayta_Ishlovchi);
f();
cout<<"Bu satr hech qachon chop qilinmaydi!";
return 0;
}
Программа экранга
Kutilmagan istisnoni qayta ishlandi!
хабарини чоп этади.
Энди юзага келган истиснога мос қайта ишловчи топилмаганда нима ҳолат рўй беришини кўрамиз. Бундай ҳолатларда келишув бўйича terminate() функцияси чақирилади. Ўз навбатида terminate() функцияси, программани фавқулотда тўхташига олиб келувчи abort() функциясини чақиради. Программа тузувчисининг программани тугашини қайта ишловчисини set_terminate() функцияси воситасида ўрнатиш орқали программани тўхтатиш жараёнига ўзгартириш киритиш мумкин. set_terminate() функцияси қуйидаги прототипга эга:
terminate_function
set_terminate(terminate_function term_func);
бу ерда terminate_function программани тугатувчи функцияга кўрсаткич:
typedef void(*terminate_function)();
Тугатиш функция адреси - term_func параметри set_terminate() функциясининг ягона кирувчи параметри ҳисобланади ва олдинги тугатиш функция адреси унинг қайтарувчи қиймати бўлади. Агар функцияни чақириш set_terminate(NULL) кўринишида бўлса, келишув бўйича тугатиш функцияси чақириш ҳолати тикланади.
terminate() функцияси прототипи
void terminate();
кўринишида ва тақдим қиланаётган тугатиш функциялари ҳам худди шундай прототипга эга бўлиши шарт.
Хотирани тозалаш билан боғлиқ зарур амаллар бажарилгандан кейин terminate() функцияси программадан чиқиш учун exit() функция-сини чақириши керак бўлади (уни чақирган функцияга ёки истисно юзага келган кодга қайтмаслик учун). Акс ҳолда abort() функцияси чақирилади.
Мисол кўрайлик:
#include
Do'stlaringiz bilan baham: |