CodeBlanks Logo Icon CodeBlanks

std::shared_ptr

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

main.cpp
#include <iostream>
#include <memory>

int main() {
    // shared_ptr oluştur, kopyala, use_count yazdır
    return 0;
}

Örnek çözüm

main.cpp
#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

Soru
std::____<int> p1 = std::make_shared<int>(10);
Cevap
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?

main.cpp
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

Orta seviye bölümündeki tüm dersler