Özel Siliciler ve Oluşturma İşlevleri
Bellek dışındaki kaynaklar için std::make_unique, std::make_shared ve özel siliciler kullanın
Özel Siliciler ve Oluşturma İşlevleri, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. 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.
Özel Siliciler Neden Kullanılır?
Her kaynak delete ile serbest bırakılmaz. Dosya tanıtıcıları, soketler, OS'ye özgü kaynaklar ve dizilerin her biri farklı bir temizleme işlevi gerektirir.
unique_ptr için Varsayılan Silici
Varsayılan olarak unique_ptr<T>, delete kullanır. Diziler için delete[] çağıran unique_ptr<T[]> kullanın.
Özel Silici Belirtme
İkinci şablon bağımsız değişkeni olarak çağrılabilir bir nesne geçirin. Silici, ham işaretçiyi alır ve onu uygun şekilde serbest bırakır.
auto closer = [](FILE* f) { if (f) std::fclose(f); };
std::unique_ptr<FILE, decltype(closer)> file(
std::fopen("data.txt", "r"), closer);shared_ptr için Silici
shared_ptr, silicisini kontrol bloğunda saklar; tür bilgisi silindiği için shared_ptr türünün kendisi değişmez.
std::shared_ptr<FILE> file(
std::fopen("data.txt", "r"),
[](FILE* f) { if (f) std::fclose(f); }
);Yaygın Özel Silici Kullanım Durumları
Gerçek hayattan örnekler:
- C kitaplığı tanıtıcıları (FILE*, sqlite3*, curl tanıtıcıları)
- OS kaynakları (Windows'ta HANDLE, Unix'te fd)
- Özel bellek havuzları
- Harici, referans sayımı yapılan nesneler
std::make_unique (C++14)
unique_ptr oluşturmanın önerilen yoludur. Bağımsız değişkenleri kurucuya iletir ve ham new kullanımını önler.
auto p = std::make_unique<Widget>(arg1, arg2);make_unique Neden Kullanılır?
Üç yararı vardır:
- Özel durum güvenliği — kullanıcı kodunda ham
newkullanılmaz - Türü iki kez yazmanız gerekmez
- Ham işaretçiyi yanlışlıkla iki unique_ptr'a geçirmeniz mümkün değildir
std::make_shared
shared_ptr için make_shared, kontrol bloğu ile nesneyi tek bir yığın ayırma işleminde ayırır; bu, ayrı ayırma işlemlerinden daha hızlıdır.
auto p = std::make_shared<Widget>(arg1, arg2);make_shared Kullanımının Dezavantajları
Tek bir ayırma yapılması, nesnenin belleğinin ancak tüm weak_ptr'lar da ortadan kalktığında serbest bırakılacağı anlamına gelir. weak_ptr'larınız shared_ptr'ların ömrünü aşıyorsa iki aşamalı oluşturmayı tercih edin.
Özel Silicileri make İşlevleriyle Birleştirme
make_unique ve make_shared doğrudan özel bir silici kabul etmez. Bu durumda akıllı işaretçiyi elle oluşturun.
// make_shared cannot take a deleter
std::shared_ptr<FILE> file(
std::fopen("data.txt", "r"),
[](FILE* f) { if (f) std::fclose(f); }
);Tuzak: Şablon Parametresi Olarak Lambda Türü
Her lambda'nın kendine özgü bir türü vardır. unique_ptr için bildirim yaparken decltype(my_deleter) kullanın; türleri basit tutmak için adlandırılmış bir işlev veya işlev işaretçisi de kullanabilirsiniz.
Hızlı Kontrol
Bir std::shared_ptr ile onun kontrol bloğunu tek bir yığın ayırma işleminde ayırmanıza olanak tanıyan fabrika işlevi hangisidir?
Özet
Rutin durumlarda make_unique ve make_shared kullanın. Kaynak delete'ten fazlasını gerektirdiğinde özel bir silici (lambda veya işlev) sağlayın; buna dosya tanıtıcıları, OS nesneleri veya C kitaplığı temizliği dahildir.
Yapay zeka eğitmeniyle C++ öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 51
- Dersler
- 203
Sıkça Sorulan Sorular
“Özel Siliciler ve Oluşturma İşlevleri” dersi ücretsiz mi?
Evet — “Özel Siliciler ve Oluşturma İşlevleri” 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.
“Özel Siliciler ve Oluşturma İşlevleri” dersinde ne öğreneceğim?
Bellek dışındaki kaynaklar için std::make_unique, std::make_shared ve özel siliciler kullanı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 4. dersidir.
“Özel Siliciler ve Oluşturma İşlevleri” 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