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»
Dastur tasnifi Mazkur dasturda mustaqil ravishda dasturchilar tomonidan teztez ishlatiladigan, «Ikki yo‘nalishli ro‘yxat» konstruksiyasini tuzishga to‘g‘ri keladi. Bu konstruksiya nomer bo‘yicha tartiblangan strukturalar majmuini bildiradi. Unda har bir struktura o‘z tarkibida to‘plamning yaqin o‘zgaruvchilariga ikkitadan ko‘rsatkichga ega bo‘ladi. Tabiiyki, struktura bu ko‘rsatkichlardan tashqari dastur uchun ba’zi foydali ma’lumotlarga ham ega bo‘ladi.Bu misol uchun masala quyidagicha qo‘yiladi: Foydali ma’lumotlar sifatida belgilar qatorini qamrab oluvchi, ikki yo‘nalishli ro‘yxat hosil qilish imkoniga ega struktura, hamda ro‘yxatga elementlar qo‘shuvchi va ro‘yxatdan elementlarni o‘chiruvchi protseduralar tuzilsin. Bu protseduralar tugmachalar bilan biriktirilsin va ro‘yxatda saqlanuvchi ma’lumotlarni chiqarish ta’minlansin.
Muammolar
Dinamik xotira bilan ishlashda zaxiralangan ma’lumotlar blokining o‘z vaqtida bo‘shatilishini nazorat qilib borish, ya’ni bunday protsedurani nazarda tutish, zarur. Bundan tashqari, dasturni tugatishdan
oldin xotiraning barcha zaxiralangan bloklari bo‘shatilishi kerak. Buning
uchun «Shakllarni yopish» - «Закрытие формы» (FormClose) xodisalarni qayta ishlash protsedurasidan xotirani bo‘shatish protsedurasini chaqirish zarur.
Do'stlaringiz bilan baham: |