Middle
Shared_ptr ile birlikte hangi gösterici kullanılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
weak_ptr.
#include <memory>
#include <iostream>
int main() {
auto shared = std::make_shared<int>(10); // Paylaşılan akış oluştur
std::weak_ptr<int> weak = shared; // shared_ptr'den weak_ptr oluştur
if (auto locked = weak.lock()) { // weak_ptr'den shared_ptr almaya çalış
std::cout << "Değer: " << *locked << std::endl;
} else {
std::cout << "Nesne silindi." << std::endl;
}
shared.reset(); // shared_ptr'nin gösterdiği nesne silinir
if (auto locked = weak.lock()) { // Tekrar deneme, nesne zaten silindi
std::cout << "Değer: " << *locked << std::endl;
} else {
std::cout << "Nesne silindi." << std::endl;
}
return 0;
}
weak_ptr ve shared_ptr birlikte kullanılarak döngüsel referanslar çözülür ve bellek sarkması önlenir, özellikle iki veya daha fazla shared_ptr tarafından yönetilen nesnelerin birbirine referans verdiği durumlarda, ve referans sayacı asla sıfıra ulaşmaz.
İşte weak_ptr'in temel özellikleri:
- Referans sayacını artırmaz:
weak_ptr,shared_ptrtarafından yönetilen nesneye "zayıf" bir referans tutar, ve nesnenin güçlü referans sayacını artırmaz. - Nesnenin yaşam döngüsü kontrolü:
lock()metodu ileweak_ptr'denshared_ptralınmaya çalışılır. Nesne hâlâ canlıysa,lock()geçerli birshared_ptrdöner; değilse, boş birshared_ptrdöner. - Doğrudan erişim yok:
weak_ptr,*veya->operatörleriyle nesnenin içeriğine doğrudan erişim sağlamaz. Erişim, yalnızcalock()çağrısından sonra mümkündür.
weak_ptr kullanımı, shared_ptr kullanan veri yapılarında referans döngülerini kırmak için standart bir yoldur, örneğin grafikler veya çift bağlı listeler gibi.