Sobes.tech
Junior — Middle

C++ da standart bo'lmagan ko'rsatkich va aqlli ko'rsatkich std::unique_ptr o'rtasidagi farqlar nimalardan iborat?

sobes.tech AI

AIdan javob

C++ da standart bo'sh (raw) ko'rsatkich va std::unique_ptr aqlli ko'rsatkich o'rtasidagi asosiy farqlar:

  • Ob'ektning hayot davrini boshqarish:

    • Raw pointer faqat manzilni saqlaydi, lekin ob'ektning hayot davrini boshqarmaydi. Delete ni qo'lda chaqirish kerak.
    • std::unique_ptr, ko'lamdan chiqishda ob'ektni avtomatik ravishda o'chiradi, xotira oqishini oldini oladi.
  • Egasi:

    • Raw pointer ob'ektga egalik qilmaydi, erkin nusxalash va o'tkazish mumkin.
    • std::unique_ptr, ob'ektni faqat o'ziga xos holda egallaydi, nusxalash taqiqlangan, faqat ko'chirish mumkin.
  • Xavfsizlik:

    • Raw pointer, ob'ektni unutib o'chirish yoki o'chirilgandan so'ng foydalanish xatoliklariga olib kelishi mumkin.
    • std::unique_ptr, avtomatik boshqarish orqali bunday xatoliklarni oldini oladi.

std::unique_ptr dan foydalanish misoli:

#include <memory>

std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr, ko'lamdan chiqishda ob'ektni avtomatik ravishda o'chiradi

Shu tarzda, std::unique_ptr dinamik xotira boshqarishni osonlashtiradi va kod xavfsizligini oshiradi.