std::shared_ptr
- C++ kursu
- Orta seviye
- Ders 83/116
- 5 dk
std::shared_ptr ile paylaşılan sahipliği öğrenirsin.
std::shared_ptr
std::shared_ptr bir nesneye paylaşılan sahiplik sağlar. Birden çok shared_ptr aynı nesneyi paylaşabilir; her biri bir referans sayacı (reference count) tutar. Son sahip yok olunca nesne silinir.
Örnek: auto p1 = std::make_shared<int>(10); ile bir shared_ptr oluşturursun. auto p2 = p1; ile kopyalarsın; artık iki sahip vardır. p1.use_count() sahip sayısını (2) verir. p1 ve p2 scope'tan çıkınca ikisi de biter; referans sayacı 0'a inince nesne silinir. Bu, grafik ve ağaç yapılarında çok kullanışlıdır.
Kopyalama ve sayım
shared_ptr kopyalanabilir; her kopya referans sayacını bir artırır. auto p2 = p1; kopyalama yapar ve sayı 2 olur. Bir shared_ptr scope'tan çıkınca sayı bir azalır.
use_count() metodu o anki sahip sayısını verir. Bu, hata ayıklamada ve doğrulamada yararlıdır. Önemli nokta: referans sayacı otomatik yönetilir; sen elle artırmazsın veya azaltmazsın. Bir shared_ptr başka bir shared_ptr'a atanırsa eski nesnenin sayacı azalır, yenisininki artar. Bu yüzden sızıntı olmaz.
Uygulama shared_ptr kopyala ve say
std::make_shared<int>(10) ile bir shared_ptr oluştur ve p1'e ata. auto p2 = p1; ile kopyala. p1.use_count() sonucunu std::cout ile yazdır.
Başlangıç kodu
#include <iostream>
#include <memory>
int main() {
// shared_ptr oluştur, kopyala, use_count yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> p1 = std::make_shared<int>(10);
std::shared_ptr<int> p2 = p1;
std::cout << p1.use_count();
return 0;
}Beklenen çıktı
2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 shared_ptr tanımla
std::____<int> p1 = std::make_shared<int>(10);
std::shared_ptr<int> p1 = std::make_shared<int>(10);
Açıklama: shared_ptr paylaşılan sahiplik sağlar.
2 shared_ptr'nin use_count() metodu ne döndürür?
auto p1 = std::make_shared<int>(10);
auto p2 = p1;
std::cout << p1.use_count();- Sahip sayısını Doğru cevap
- Toplam bellek miktarını
- İşaretçi adresini
- Nesnenin boyutunu
Açıklama: use_count() sahip sayısını (bu örnekte 2) döndürür.
3 Özelliği anlamıyla eşle
| Kavram | Anlamı |
|---|---|
std::shared_ptr |
Paylaşılan sahiplik |
std::make_shared |
Güvenli oluşturma |
use_count() |
Sahip sayısı |
auto p2 = p1 |
Kopyalama |