• include 2 int* createPtr(int value) 3 { 4 int *ptr = new int(value); 5 return ptr; 6 } 7 void usePtr()
  • 13 int main() 14 { 15 usePtr(); 16 return 0; 17 }
  • int *p1 = new int(); // avtomatik holatda qitmati- 0




    Download 15,08 Mb.
    bet78/135
    Sana22.05.2024
    Hajmi15,08 Mb.
    #250347
    1   ...   74   75   76   77   78   79   80   81   ...   135
    Bog'liq
    Fizik jarayonlarni kompyuterda modellashtirish

    1 int *p1 = new int(); // avtomatik holatda qitmati- 0
    2std::cout << "p1: " << *p1 << std::endl; // 0
    3
    4 int *p2 = new int(12);
    5 std::cout << "p2: " << *p2 << std::endl; // 12
    Bu, ayniqsa, dinamik ob'ekt kodning bir qismida yaratilgan bo’lsa va boshqa qismida ishlatilsa, hisobga olinishi kerak. Masalan: Xotirani bo'shatish Dinamik ob'ektlar aniq o'chirilmaguncha mavjud bo'ladi. Dinamik ob'ektlardan foydalanish tugagandan so'ng, ularning xotirasi o'chirish operatori yordamida bo'shatilishi kerak:
    1 #include
    2 int* createPtr(int value)
    3 {
    4 int *ptr = new int(value);
    5 return ptr;
    6 }
    7 void usePtr()
    8 {
    9 int *p1 = createPtr(10);
    10 std::cout << *p1 << std::endl; // 10
    11delete p1; // ob’ektni bo’shatish zarur
    12 }
    13 int main()
    14 {
    15 usePtr();
    16 return 0;
    17 }
    UsePtr funksiyasida biz createPtr funksiyasidan dinamik ob'ektga ko'rsatgich olamiz. Biroq, usePtr funksiyasi bajarilgandan so'ng, bu ob'ekt avtomatik ravishda xotiradan o'chirilmaydi (mahalliy avtomatik ob'ektlarda bo'lgani kabi). Shuning uchun uni o'chirish operatori yordamida aniq o'chirish kerak. Ob'ektni o'chirilgandan keyin ko'rsatgich bo'yicha ishlatish yoki o'chirish operatorini ko'rsatgichga qayta qo'llash oldindan aytib bo'lmaydigan natijalarga olib kelishi mumkin:
    1 int *p1 = new int(12);
    2 std::cout << *p1 << std::endl; // 12
    3 delete p1;
    4 // hatoli stsenariylar
    5 std::cout << *p1 << std::endl; // p1 ko’rsatkich bo’yicha ob’ekt uchirilgan!
    6 delete p1; // p1 ob’ekt bo’yicha ko’rsatkich uchirilgan!
    Shuning uchun ob'ektni faqat bir marta o'chirishingiz kerak. Ko'pincha bir nechta ko'rsatkichlar bir vaqtning o'zida bir xil dinamik ob'ektga ishora qiladi. Agar ko'rsatkichlardan biriga o'chirish operatori qo'llanilsa, u holda ob'ekt xotirasi bo'shatiladi va biz ikkinchi ko'rsatgich yordamida bu ob'ektdan endi foydalana olmaymiz. Agar bundan keyin ikkinchi ko'rsatgichga o'chirish operatori qo'llanilsa, u holda dinamik xotira buzilishi mumkin. Shu bilan birga, o'chirish operatorini qo'llaganingizdan so'ng, ko'rsatgichlarning yo'l qo'yilmasligi biz ushbu ko'rsatkichlardan printsipial ravishda foydalana olmaymiz degani emas. Agar ularga boshqa ob'ektning manzilini bersak, ulardan foydalanishimiz mumkin.

    Download 15,08 Mb.
    1   ...   74   75   76   77   78   79   80   81   ...   135




    Download 15,08 Mb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    int *p1 = new int(); // avtomatik holatda qitmati- 0

    Download 15,08 Mb.