shared_ptr ve weak_ptr ile Paylaşılan Sahiplik
Referans sayımıyla sahipliği paylaşın ve weak_ptr ile döngüleri kırın
shared_ptr ve weak_ptr ile Paylaşılan Sahiplik, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Nesne Paylaşımı
Bazen programın birden fazla bölümü bir nesneyi canlı tutmalıdır. std::shared_ptr<T>, başvuru sayımıyla paylaşılan sahipliği yönetir.
shared_ptr Oluşturma
std::make_shared kullanınız; denetim bloğunu ve nesneyi tek bir ayırma işleminde oluşturur.
#include <memory>
auto s = std::make_shared<Widget>(42);
std::cout << s.use_count(); // 1Kopyalama Sahipliği Paylaştırır
Bir shared_ptr'yi kopyalamak, başvuru sayacını artırır. Yok etmek veya yeniden atamak sayacı azaltır. Sayaç 0'a ulaştığında nesne silinir.
auto a = std::make_shared<Widget>();
auto b = a; // ref count is now 2
std::cout << a.use_count(); // 2İçeride Nasıl Çalışır
Bir shared_ptr iki işaretçi tutar: biri nesneye, diğeri başvuru sayaçlarını içeren denetim bloğuna işaret eder. Denetim bloğu öbekte ayrılır.
Atomik Başvuru Sayacı
Başvuru sayacı, shared_ptr'lerin iş parçacıkları arasında güvenle kopyalanabilmesi için atomik işlemler kullanır. Ancak işaret edilen nesne kendiliğinden iş parçacığı güvenli değildir.
Sıfırlama ve Yeniden Atama
Yeni bir değer atamak eski başvuru sayacını azaltır ve yenisini artırır. reset(), shared_ptr'yi boş duruma getirir.
Ham İşaretçiden shared_ptr Oluşturma (Kaçının)
Aynı ham işaretçiden iki shared_ptr oluşturmayın; ikisinin de kendi kontrol bloğu olur. Her zaman make_shared kullanın.
// BUG
Widget* raw = new Widget();
std::shared_ptr<Widget> a(raw);
std::shared_ptr<Widget> b(raw); // disaster: two control blocksDöngü Sorunu
Birbirlerine başvuran iki shared_ptr bir döngü oluşturur; ikisinin de referans sayısı sıfıra ulaşmaz ve hiçbiri serbest bırakılmaz. Bellek sızıntısı oluşur.
struct Node {
std::shared_ptr<Node> next;
};
auto a = std::make_shared<Node>();
auto b = std::make_shared<Node>();
a->next = b;
b->next = a; // cycle — never freedDöngüleri weak_ptr ile Kırma
std::weak_ptr<T>, referans sayısına katılmadan bir shared_ptr'ı gözlemler. Döngüyü kırmak için ilişkinin bir tarafını zayıf yapın.
struct Node {
std::shared_ptr<Node> next;
std::weak_ptr<Node> prev; // weak — does not own
};weak_ptr Kullanımı
Bir weak_ptr'ın başvurusunu doğrudan kaldıramazsınız. Bir shared_ptr elde etmek için lock() çağırın; nesne yok olmuşsa boş bir shared_ptr döner.
std::weak_ptr<Widget> w = sharedPtr;
if (auto p = w.lock()) {
p->use(); // safe — we have a shared_ptr now
} else {
std::cout << "object expired";
}unique_ptr ile Maliyet Karşılaştırması
shared_ptr daha büyüktür (iki işaretçi ve bir kontrol bloğu) ve daha yavaştır (atomik referans sayısı nedeniyle). Onu yalnızca sahipliğin gerçekten paylaşılması gerektiğinde kullanın.
Hızlı Kontrol
std::weak_ptr için tipik kullanım durumu nedir?
Özet
shared_ptr, sahipliği atomik bir referans sayısıyla izler. make_shared kullanın, döngülere dikkat edin ve bunları weak_ptr ile kırın. Paylaşım gerekmiyorsa unique_ptr'ı tercih edin.
Sıkça Sorulan Sorular
“shared_ptr ve weak_ptr ile Paylaşılan Sahiplik” dersi ücretsiz mi?
Evet — “shared_ptr ve weak_ptr ile Paylaşılan Sahiplik” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“shared_ptr ve weak_ptr ile Paylaşılan Sahiplik” dersinde ne öğreneceğim?
Referans sayımıyla sahipliği paylaşın ve weak_ptr ile döngüleri kırın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“shared_ptr ve weak_ptr ile Paylaşılan Sahiplik” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Akıllı İşaretçiler Ham new ve delete'in Yerini Neden Alır
- unique_ptr ile Özel Sahiplik
- shared_ptr ve weak_ptr ile Paylaşılan Sahiplik
- Özel Siliciler ve Oluşturma İşlevleri