Raqamli texnologiyalar fakulteti dasturiy injiniring yo’nalishi


Xotirani tozalash uchun funktsional sinash blokidan foydalanmang



Download 1,57 Mb.
bet17/81
Sana23.06.2022
Hajmi1,57 Mb.
#695199
1   ...   13   14   15   16   17   18   19   20   ...   81
Bog'liq
Dasturiy injiniring Dasturlash 2-4

Xotirani tozalash uchun funktsional sinash blokidan foydalanmang

Agar ob'ektni yaratish operatsiyasi muvaffaqiyatsiz bo'lsa, u holda sinf destruktori chaqirilmaydi. Shuning uchun siz sinfga ajratilgan xotiraning bir qismini tozalash uchun funktsional sinash blokidan foydalanish vasvasasiga tushishingiz mumkin. Biroq, ob'ektning yaratilmagan a'zolariga kirish aniqlanmagan xatti-harakatlar hisoblanadi, chunki ob'ekt catch bloki ishga tushishidan oldin ham "o'lik" bo'ladi. Bu sinfni tozalashni amalga oshirish uchun funktsional sinash blokidan foydalana olmasligingizni anglatadi.




Xulosa
Funktsional sinash bloklari, asosan, xatolarni qo'ng'iroqlar to'plamiga o'tkazishdan oldin jurnal fayliga yozish yoki istisno turini o'zgartirish uchun foydalidir.

19-MA’RUZA. ISTISNOLI HOLATLAR SPESIFIKASIYASI. ISTISNOLI HOLATLAR SINFLARI.

EXCEPTION SINF INTERFEYSI.


C++ standart kutubxonasidagi ko'plab sinflar va operatorlar muvaffaqiyatsizlikka uchragan holda istisno sinflarini chiqaradilar. Masalan, new operatori va string xotirasi tugashi bilan bad_alloc ni tashlashi mumkin. dynamic_cast operatori yordamida bajarilmagan dinamik translatsiya bad_cast istisno va hokazolarni chiqaradi. C++14 dan beri 20 dan ortiq istisno sinflari mavjud va C++17 da bundan ham ko'proq.
Yaxshi xabar shundaki, ushbu istisno sinflarining barchasi exception sinfining avlodlari. exception – bu C++ standart kutubxonasiga tashlangan har qanday istisno uchun ajdod-sinf sifatida ishlatiladigan kichik oldingi sinf.
Ko'pincha, agar istisno C ++ standart kutubxonasi tomonidan tashlangan bo'lsa, bu noto'g'ri taqsimlash, konvertatsiya yoki boshqa biror narsa bo'lganiga ahamiyat bermaymiz. Bizning dasturimiz ishdan chiqishiga sabab bo'lgan halokatli voqea sodir bo'lganligini bilish kifoya. exception tufayli biz exception kabi istisno ishlovchisini o‘rnatishimiz mumkin, u ikkala exception va barcha (20 dan ortiq) avlod istisno sinflarini ushlab turadi va boshqaradi!

#include


#include
#include
using namespace std;
int main()
{
try
{
// C ++ standart kutubxonasidan foydalanadigan kod shu yerda bo'lishi kerak.
// Endi biz ataylab tashlanadigan istisnolardan birini ishga tushiramiz
string s;
s.resize(-1); // bad_alloc istisnosini generatsiyalash
}
// Ushbu ishlov beruvchi exception va uning barcha avlod istisno sinflarini ushlaydi
catch (exception &exception)
{
cerr << "Standard exception: " << exception.what() << '\n';
}
return 0;
}

Dasturni bajarish natijasi:


Standart istisno: qator juda uzun


Bu misol juda oddiy. exception tavsiflovchi C uslubidagi qatorni qaytaruvchi virtual what() metodiga ega. Ko'pgina avlod sinflari ushbu xabarni o'zgartirish orqali what() funksiyasini bekor qiladi. E'tibor bering, ushbu C uslubidagi satr faqat tavsiflash uchun mo'ljallangan.


Ba'zan biz istisnolarning ma'lum bir turini boshqa turdagi istisnolardan biroz boshqacha tarzda hal qilishimiz kerak bo'ladi. Bunday holda, biz ushbu maxsus tur uchun istisno ishlovchisini qo'shishimiz mumkin va boshqa barcha istisnolar ajdod ishlov beruvchisiga "qayta yo'naltirish" mumkin. Masalan:
try
{
// C ++ standart kutubxonasidan foydalanadigan kod bu yerga kirishi kerak
}
// Ushbu ishlov beruvchi bad_alloc va uning barcha avlod istisno sinflarini ushlaydi
catch (bad_alloc &exception)
{
cerr << "You ran out of memory!" << '\n';
}
// Ushbu ishlov beruvchi istisno va uning barcha avlod istisno sinflarini ushlaydi
catch (exception &exception)
{
cerr << "Standard exception: " << exception.what() << '\n';
}

Ushbu misolda bad_alloc turidagi istisnolar birinchi ishlov beruvchi tomonidan ushlanadi va boshqariladi. exception tipidagi istisnolar va boshqa barcha avlod istisno sinflari ikkinchi ishlov beruvchi tomonidan boshqariladi.


Bunday meros iyerarxiyasi muayyan turdagi istisnolarni qo'lga olish uchun maxsus ishlov beruvchilardan yoki butun istisnolar ierarxiyasini ushlab turish uchun bitta (ajdod) ishlov beruvchidan foydalanish imkonini beradi.

#include


#include
int main()
{
try
{
throw runtime_error("Yomon narsalar sodir bo'ldi");
}
// Ushbu ishlov beruvchi exception va uning barcha avlod sinflari-istisnolarini ushlaydi
catch (exception &exception)
{
cerr << "Standard exception: " << exception.what() << '\n';
}
return 0;
}

Natija:

Standart istisno: yomon narsalar sodir bo'ldi



Download 1,57 Mb.

Do'stlaringiz bilan baham:
1   ...   13   14   15   16   17   18   19   20   ...   81




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish