Junior
C++ da qanday aqlli ko'rsatkichlar mavjud?
sobes.tech AI
AIdan javob
std::unique_ptr, std::shared_ptr, std::weak_ptr.
-
std::unique_ptr:- Ob'ektning eksklyuziv mulkiyati.
- Nusxa ko'chirilmaydi, lekin harakatlantirilishi mumkin (
std::move). unique_ptrning hududidan chiqib ketganda yoki yo'q qilinadigan bo'lsa, ob'ekt avtomatik ravishda o'chiriladi.- Yengil, qo'shimcha xarajatlar yo'q, referenslar hisoblagichi uchun.
#include <memory> // unique_ptr yaratish std::unique_ptr<int> up1(new int(10)); // Egashuvni ko'chirish std::unique_ptr<int> up2 = std::move(up1); // up1 endi nullptr // up2 ob'ektni egallaydi -
std::shared_ptr:- Ob'ektning umumiy mulkiyati.
- Resursga qaysi
shared_ptrlar murojaat qilayotganini kuzatish uchun referenslar hisoblagichi ishlatiladi. - Oxirgi
shared_ptryo'q qilinsa, ob'ekt o'chiriladi. - Ko'chirilishi va harakatlanishi mumkin.
- Referenslar hisoblagichi uchun qo'shimcha xarajatlar (odatda alohida ajratiladi).
- Siklik bog'lanishlar hosil qilishi mumkin, bu esa xotira oqishiga olib keladi.
#include <memory> // shared_ptr yaratish std::shared_ptr<int> sp1 = std::make_shared<int>(20); // Egashuvni nusxalash std::shared_ptr<int> sp2 = sp1; // Referenslar soni oshadi // sp1 va sp2 ob'ektni egallaydi -
std::weak_ptr:- Ob'ektni egallamaydi.
- Bir yoki bir nechta
shared_ptrtomonidan boshqariladigan ob'ektga "zaif" havola sifatida xizmat qiladi. shared_ptrlar orasidagi siklik bog'lanishni oldini olish uchun ishlatiladi.- Ob'ektning referenslar hisoblagichini oshirmaydi.
- Ob'ektga xavfsiz kirish uchun, uni
lock()metodi yordamidashared_ptrga aylantirish kerak. Agar ob'ekt allaqachon o'chirilgan bo'lsa,lock()bo'shshared_ptrqaytaradi.
#include <memory> // shared_ptr yaratish std::shared_ptr<int> sp = std::make_shared<int>(30); // shared_ptr dan weak_ptr yaratish std::weak_ptr<int> wp = sp; // Ob'ektni tekshirish va foydalanish if (auto shared_from_weak = wp.lock()) { // shared_from_weak orqali ob'ektga kirish } else { // Ob'ekt allaqachon o'chirilgan }