int *pint = new int(1024);
Bu yerda new buyrug‘i int turidagi nomsiz ob’yekt uchun joy ajratadi, uni
1024 qiymat bilan initsializatsiya qiladi va hosil qilingan ob’yektning
manzilini uzatadi. Bu manzil pint ko‘rsatkichiga joylashtiradi.Bunday
nomsiz ob’yektlar ustidagi barcha amallar mazkur ko‘rsatkich bilan
ishlash orqali bajariladi, chunki dinamik ob’yektlar ustida bevosita ishlash
mumkin emas.Ikkinchi shaklda new buyrug‘i ma’lum tur elementlaridan
tashkil topgan, ko‘rsatilgan o‘lchamdagi massiv uchun xotira ajratadi:
int *pia = new int[4];
Bu misolda int turidagi to‘rt elementdan iborat massiv uchun xotira
ajratiladi. Afsuski, new buyrug‘ining bu shaklida massiv elementlarini
initsializatsiya qilish imkoniyati yo‘q.new buyrug‘ining ikkala shaklida
ham bir xil ko‘rsatkich aniqlanishi ba’zi chalkashliklarga olib kelishi
mumkin. Qaralayotgan misolda bu butun turga ko‘rsatkichdir. pint ham,
pia ham bir xil e’lon qilingan, ammo pint int turidagi yagona ob’yektni
ko‘rsatadi, pia esa int turidagi to‘rtta ob’yektdan iborat massivni
ko‘rsatadi.Dinamik ob’yekt kerak bo‘lmay qolganda unga ajratilgan
sohani oshkor ravishda bo‘shatish mumkin. Bu delete buyrug‘i
yordamida bajariladi:
delete pint;
Massivni bo‘shatish ham new buyrug‘i kabi ikki shaklga ega, birlik
ob’yekt uchun va massiv uchun.
delete[] pia;
Agar ajratilgan xotirani bo‘shatishni unutsak, u bo‘shga sarflanadi,
ishlatilmaydi. Agar unga bo‘lgan ko‘rsatkich o‘z qiymatini o‘zgartirgan
bo‘lsa uni tizimga qaytarish ham mumkin emas. Bunday
xodisa xotiraning oqib ketishi degan maxsus nom olgan. Oxir oqibatda
dastur xotira etmasligi sababli halokatli (avariyali) to‘xtaydi (agar u uzoq
vaqt ishlasa).
7 - misol: «Ko‘rsatkichlardan foydalanuvchi ro‘yxatlar»
Do'stlaringiz bilan baham: |