Tiplarni dinamik tarzda
Konteyner va uni qo‘llanilishi
Download 1.83 Mb.
|
Tiplarni dinamik tarzda
Konteyner va uni qo‘llanilishi. Xotirada ko‘p hollarda merosxo‘r obʻyektlarini saqlovchi sinflar vujudga keladi. Ularning xotiradan o‘chirilishi bazaviy sinf bilan bog‘liqdir. Masalan, sinf bo‘lsin va tugun ichidagi matndan olingan mo‘rosxo‘rlari Node va Attribute hamda (char*) qatorlardan to‘ldirilgan. Yoki papkani qayta o‘qish va yana o‘zgartirishda, bir marta yuklanadi fayl menejeri fayllar va kataloglar ro‘yxati.
Yuqorida ko‘rsatilgandek, new operatoriga nisbattan delete operatori foydalanish qiyinroq va muammoliroq bo‘ladi. Bazaviy sinf obʻyekti bilan bog‘liq katta blokda merosxo‘r sinf obʻyektlari uchun xotira ajratish kerak. Bazaviy sinf obʻyektini yo‘q qilish paytida, destruktor odatdagidek, merosxo‘r sinf uchun chaqiriladi, lekin xotirani qaytarishingiz shart emas — bu katta blokda ozod qilinadi. PointerBumpAllocator sinf yaratamiz. Bu sinf katta blokdan turli o‘lchamdagi qismlarni kesib tashlash va eskisi tugagach, yangi katta blokni tanlashga imkon beradi. PointerBumpAllocator sinfining dastur fragmenti.
Nihoyat, new va delete operatorlari bilan childObject ni tuzamiz va berilgan allocator bilan murojaat qilamiz:
Child sinfiga o‘zgaruvchilarni qo‘shish uchun barcha eʻlonlarni new operatori orqali amalga oshirish kerak bo‘ladi. New operatori quyidagicha bo‘ladi.
Qulaylik uchun A& va A* uchun new operatorlarni qo‘llaymiz.
Agar allokator ajratuvchi sifatida qo‘shilsa, ikkinchisidan foydalanish qulayroq:
Bundan tushinarli bo‘ladiki, ortiqcha belgilardan qochishda amallarni bo‘lish uchun ko‘rsatkich va havolalar konvertatsiya bo‘ladi. Obʻyekt yaratishda qaysi New operatoridan foydalanganligiga qaramasdan, delete operatori yordamida o‘chirish amalga oshirilmaydi, kompilyatorning o‘zi standart delete operatoridan foydalanadi. Quyidagicha sintaktik asosida:
Agar ChildObject sinfi obʻyekti yoki uning merosxo‘ri obʻyektidan foydalanayotgan bo‘lsangiz, new istisno vaqtida operatoriga mos delete orperatori chaqiriladi. Shuning uchung bu obʻyektdan foydalanganda birinchi size_t parametrni void*ga o‘zgartirish lozim. New operatorini private bo‘limiga joylashtirish, uni allokatorsiz ishlashaga ruxsat bermaydi. Download 1.83 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling