Middle
shared_ptr ilə birlikdə hansı göstərici istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
weak_ptr.
#include <memory>
#include <iostream>
int main() {
auto shared = std::make_shared<int>(10); // Paylaşılan göstərici yaradılır
std::weak_ptr<int> weak = shared; // shared_ptr-dən weak_ptr yaradılır
if (auto locked = weak.lock()) { // weak_ptr-dən shared_ptr almağa cəhd
std::cout << "Dəyər: " << *locked << std::endl;
} else {
std::cout << "Obyekt silinib." << std::endl;
}
shared.reset(); // shared_ptr-in göstərdiyi obyekt silinir
if (auto locked = weak.lock()) { // Yenidən cəhd, obyekt artıq silinib
std::cout << "Dəyər: " << *locked << std::endl;
} else {
std::cout << "Obyekt silinib." << std::endl;
}
return 0;
}
weak_ptr və shared_ptr birlikdə istifadə edilərək dövrü referanslar problemi həll edilir və yaddaş sarkması qarşısı alınır, xüsusən iki və ya daha çox shared_ptr tərəfindən idarə olunan obyektlərin bir-birinə istinad etdiyi hallarda, və referans sayğacı heç vaxt sıfıra çatmır.
Əsas weak_ptr xüsusiyyətləri:
- Güclü referans sayğacını artırmır:
weak_ptrshared_ptrtərəfindən idarə olunan obyektə "zəif" istinad saxlayır, və onun güclü referans sayğacını artırmır. - Obyektin həyat dövrünün yoxlanması:
lock()metodu iləweak_ptr-dənshared_ptralmağa çalışılır. Əgər obyekt hələ də mövcuddursa,lock()etibarlıshared_ptrqaytarır; əks halda, boşshared_ptr. - Birbaşa giriş yoxdur:
weak_ptr*və->operatorları ilə obyektin məzmununa birbaşa giriş təmin etmir. Giriş yalnızlock()çağırışından sonra mümkündür.
weak_ptr istifadəsi, shared_ptr istifadə edən məlumat strukturlarında referans döngülərini qırmaq üçün standart bir yoldur, məsələn, qrafiklər və ya ikili bağlı siyahılar kimi.