unique_ptr ile Özel Sahiplik
Tek sahiplik anlamını unique_ptr ve yalnızca taşınabilen türlerle ifade edin
unique_ptr ile Özel Sahiplik, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. 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.
Tek Sahipli Akıllı İşaretçi
std::unique_ptr<T>, öbekteki bir nesnenin sahibidir. unique_ptr yok edildiğinde nesneyi siler. Kopyalanamaz; yalnızca taşınabilir.
unique_ptr Oluşturma
std::make_unique (C++14) kullanınız; özel durumlara karşı güvenli ve kısadır.
#include <memory>
auto w = std::make_unique<Widget>(); // default-constructed
auto p = std::make_unique<Point>(3, 4); // forwarded argsİşaretçi Gibi Kullanma
unique_ptr, alışılmış işaretçi işlemlerini destekler.
auto p = std::make_unique<Point>(3, 4);
std::cout << p->x; // arrow access
std::cout << (*p).y; // dereference
if (p) std::cout << "non-null";Kopyalanamaz — Taşınabilir
Kopyalama iki sahip anlamına gelirdi; bu, “tekil” olma kuralını ihlal eder. Taşıma işlemi sahipliği devreder.
std::unique_ptr<int> a = std::make_unique<int>(1);
std::unique_ptr<int> b = std::move(a);
// a is now empty, b owns the intİşlevlere Aktarma
Değerle (std::move ile): sahipliği devrediniz. Referansla: sahip olmadan ödünç alınız.
void consume(std::unique_ptr<Widget> w); // takes ownership
void inspect(const Widget& w); // borrows
auto w = std::make_unique<Widget>();
consume(std::move(w));
// w is now empty
inspect(*w); // (after re-creating)İşlevlerden Döndürme
Ayırdığı bir nesnenin sahipliğini döndüren işlev, std::unique_ptr döndürmelidir.
std::unique_ptr<Widget> create() {
return std::make_unique<Widget>();
}Sıfırlama ve Sahipliği Bırakma
reset(), geçerli nesneyi siler ve isteğe bağlı olarak yeni bir nesnenin sahipliğini alır. release(), sahipliği bırakır ve ham işaretçiyi döndürür.
auto p = std::make_unique<int>(10);
p.reset(new int(20)); // delete the old, own the new
int* raw = p.release(); // p is now empty
delete raw; // caller must deleteget(): Ham İşaretçiyi Ödünç Alma
get(), sahipliği bırakmadan ham işaretçiyi döndürür. Sahiplik gerektirmeyen birlikte çalışabilirlik için kullanınız.
auto p = std::make_unique<int>(42);
legacy_api(p.get()); // p still owns itDiziler için unique_ptr
Diziler için unique_ptr<T[]> kullanınız. Dizinli erişim [] ile yapılır; yok edilme sırasında delete[] çağrılır.
auto arr = std::make_unique<int[]>(10);
arr[0] = 99;
std::cout << arr[0];Özel Siliciler
Kaynak ham bellek olmadığında, örneğin dosya tutamaçlarında veya OS kaynaklarında, şablon parametresi olarak özel bir silici sağlayınız.
auto closer = [](FILE* f) { if (f) std::fclose(f); };
std::unique_ptr<FILE, decltype(closer)> file(std::fopen("a.txt","r"), closer);Başarım
Varsayılan siliciyle unique_ptr, ham işaretçiyle aynı boyuta ve hıza sahiptir; ek yük oluşturmaz.
Kısa Sınama
std::unique_ptr neden kopyalamayı engeller?
Özet
std::unique_ptr varsayılan akıllı işaretçidir: ek yük oluşturmaz, özel sahiplik sağlar ve kopyalanamaz ancak taşınabilir. Oluşturma için std::make_unique kullanmayı tercih ediniz.
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
“unique_ptr ile Özel Sahiplik” dersi ücretsiz mi?
Evet — “unique_ptr ile Özel 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.
“unique_ptr ile Özel Sahiplik” dersinde ne öğreneceğim?
Tek sahiplik anlamını unique_ptr ve yalnızca taşınabilen türlerle ifade edin 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 2. dersidir.
“unique_ptr ile Özel 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