Akıllı İşaretçiler Ham new ve delete'in Yerini Neden Alır
RAII'yi ve sahiplik için ham işaretçilerin kullanılmasının modern C++'ta neden nadiren doğru olduğunu anlayın
Akıllı İşaretçiler Ham new ve delete'in Yerini Neden Alır, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 1. 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.
Ham new ve delete
C'den miras kalan yaklaşımda new T, öbekte bir T ayırır; delete ise onu serbest bırakır. Her new işlemini tam olarak bir delete ile eşleştirmeniz gerekir; aksi hâlde bellek sızıntısı veya çökme meydana gelir.
Widget* w = new Widget();
// ... use w ...
delete w; // forget this and you leakNe Yanlış Gidebilir
Yaygın hatalar:
- Unutulan
delete— bellek sızıntısı - Çift
delete— tanımsız davranış newiledeletearasında özel durum oluşması — sızıntı- Sahipliği belirsiz bir ham işaretçi döndürmek
RAII İmdada Yetişiyor
Kaynak Edinimi Başlatmadır: bir kaynağın yaşam süresini yığın üzerindeki bir nesnenin yaşam süresine bağlar. Bir özel durum oluşsa bile yıkıcı, kaynağı serbest bırakır.
Akıllı İşaretçi Fikri
Akıllı işaretçi, ham işaretçinin çevresindeki küçük bir RAII sarmalayıcısıdır. Yıkıcısı delete çağrısını yapar. Kaynağı serbest bırakmayı unutmazsınız.
Üç Akıllı İşaretçi
<memory> içindeki standart kitaplık akıllı işaretçileri:
std::unique_ptr<T>— özel sahiplikstd::shared_ptr<T>— başvuru sayımıyla paylaşılan sahiplikstd::weak_ptr<T>— shared_ptr'nin sahip olmayan gözlemcisi
Akıllı İşaretçiler Ek Maliyet Getirmez
unique_ptr ek yük oluşturmaz; boyutu ve hızı ham işaretçiyle aynıdır. shared_ptr küçük bir atomik başvuru sayacı maliyeti getirir.
Elle delete Kullanımına Son
Akıllı işaretçilerle neredeyse hiçbir zaman delete yazmazsınız. Yıkıcı bununla ilgilenir.
#include <memory>
std::unique_ptr<Widget> w = std::make_unique<Widget>();
// no delete needed — when w goes out of scope, Widget is destroyedAkıllı İşaretçiler ve Özel Durumlar
Bir işlevin ortasında özel durum oluşursa yerel değişkenler ters sırayla yok edilir. Akıllı işaretçiler kaynaklarını otomatik olarak serbest bırakır; ham işaretçiler ise sızıntıya neden olur.
Türde Sahiplik
Artık akıllı işaretçinin türü sahipliği belirtir. Bir işlev imzasını okuyarak nesnenin kime ait olduğunu anlayabilirsiniz.
// I take ownership
void consume(std::unique_ptr<Widget> w);
// I look but do not own
void inspect(const Widget& w);Ham İşaretçiler Hâlâ Var
Sahip olmayan erişim için ham işaretçileri veya referansları kullanınız. Bunlar “sahip değilim, ödünç alıyorum” anlamını taşır.
new Yerine make İşlevlerini Kullanma
std::make_unique (C++14) ve std::make_shared (C++11) kullanmayı tercih ediniz. Bunlar özel durumlara karşı güvenlidir ve doğrudan new çağırmaktan biraz daha verimlidir.
auto w = std::make_unique<Widget>(42);
auto s = std::make_shared<Resource>("file.txt");Kısa Sınama
Ham bir new/delete çifti yerine std::unique_ptr kullanmanın temel nedeni nedir?
Özet
Ham new/delete kullanımı hataya açıktır. Akıllı işaretçiler, öbekte ayrılan nesneleri kaynaklarını otomatik olarak serbest bırakan RAII tutamaçlarıyla sarar. Güvenlik ve başarım için std::make_unique ile std::make_shared kullanmayı tercih ediniz.
Sıkça Sorulan Sorular
“Akıllı İşaretçiler Ham new ve delete'in Yerini Neden Alır” dersi ücretsiz mi?
Evet — “Akıllı İşaretçiler Ham new ve delete'in Yerini Neden Alır” 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.
“Akıllı İşaretçiler Ham new ve delete'in Yerini Neden Alır” dersinde ne öğreneceğim?
RAII'yi ve sahiplik için ham işaretçilerin kullanılmasının modern C++'ta neden nadiren doğru olduğunu anlayı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 1. dersidir.
“Akıllı İşaretçiler Ham new ve delete'in Yerini Neden Alır” 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