std::unique_ptr
- C++ kursu
- Orta seviye
- Ders 82/116
- 5 dk
std::unique_ptr ile tek sahipliği öğrenirsin.
std::unique_ptr
std::unique_ptr bir nesneye tek sahiplik (exclusive ownership) sağlayan akıllı işaretçidir. Sahip scope'tan çıkınca işaret ettiği nesne otomatik olarak silinir. <memory> başlığında tanımlıdır.
Örnek: std::unique_ptr<int> p(new int(42)); ile bir int nesnesi oluşturursun. *p ile değere erişirsin. p scope'tan çıkınca int otomatik silinir; delete yazmana gerek yok. unique_ptr kopyalanamaz ama taşınabilir (std::move ile). Bu, tek sahibin olduğunu garanti eder.
Move semantiği
unique_ptr kopyalanamaz ama taşınabilir. Sahipliği başka bir unique_ptr'a devretmek için std::move kullanırsın: auto p2 = std::move(p1);. Bu işlem sonrası p1 boş hale gelir (nullptr).
Taşıma, sahipliğin aktarıldığı anlamına gelir; kopyalama yoktur. Bu yüzden her zaman tek bir sahip kalır. Bir fonksiyondan unique_ptr döndürmek de taşıma yapar: return p; sahipliği çağırana devreder. Bu, fabrika fonksiyonlarında çok kullanışlıdır; oluşturulan nesnenin sahipliği güvenle çağırana geçer.
Uygulama unique_ptr oluştur ve yazdır
std::unique_ptr<int> ile new int(42) değeriyle bir işaretçi oluştur. *p ile değere eriş ve std::cout ile yazdır. #include <memory> gerektiğini unutma.
Başlangıç kodu
#include <iostream>
#include <memory>
int main() {
// unique_ptr<int> oluştur, 42 değeri ver, yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int> p(new int(42));
std::cout << *p;
return 0;
}Beklenen çıktı
42
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 unique_ptr scope'tan çıkınca ne olur?
{
std::unique_ptr<int> p(new int(42));
} // scope sonu- Hiçbir şey olmaz
- Bellek sızıntısı olur
- Program çöker
- İşaret ettiği nesne otomatik silinir Doğru cevap
Açıklama: unique_ptr yıkıcısı nesneyi otomatik siler.
2 unique_ptr tanımla
std::____<int> p(new int(42));
std::unique_ptr<int> p(new int(42));
Açıklama: unique_ptr tek sahiplik sağlar.
3 Özelliği anlamıyla eşle
| Kavram | Anlamı |
|---|---|
std::unique_ptr |
Tek sahiplik |
std::move(p1) |
Sahipliği devret |
*p |
Değere erişim |
scope sonu |
Otomatik silme |