CodeBlanks Logo Icon CodeBlanks

std::unique_ptr

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

main.cpp
#include <iostream>
#include <memory>

int main() {
    // unique_ptr<int> oluştur, 42 değeri ver, yazdır
    return 0;
}

Örnek çözüm

main.cpp
#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?

main.cpp
{
    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

Soru
std::____<int> p(new int(42));
Cevap
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

Orta seviye bölümündeki tüm dersler