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.