CodeBlanks Logo Icon CodeBlanks

Özet - Sahiplik

Move, Copy ve fonksiyon geçişlerini birleştirerek sahiplik akışını izlersin.

Sahiplik özeti

Üç kural: her değerin tek sahibi vardır; sahip kapsamdan çıkınca değer drop edilir; atama ve fonksiyon çağrısı Copy olmayan değerleri taşır. Copy türler (sayılar, bool, char, Copy alanlı tuple/dizi) kopyalanır. Derin kopya .clone() ile açıkça yapılır. Döndürmek sahipliği çağırana aktarır. Çöp toplayıcı olmadan bellek güvenliğini bu kurallar sağlar.

Kapsamlarla düşünmek

Bir değerin ne zaman bırakılacağını anlamak için süslü parantezlere bak: değer, sahibinin tanımlandığı bloğun sonunda bırakılır. Değeri daha erken bırakmak için drop(deger) çağrılabilir; bu özellikle kilitleri ve büyük tamponları erken serbest bırakmak için kullanışlıdır.

let buyuk = vec![0u8; 10_000_000];
// ... kullan ...
drop(buyuk);         // bellek burada serbest
// buyuk artık kullanılamaz

Uygulama Sahiplik zinciri

fn yeni_veri() -> String "veri" döndürsün; fn tuket(s: String) -> usize uzunluğu döndürsün. main'de let s = yeni_veri();, let kopya = s.clone();, let n = tuket(s); yap ve kopya ile n'yi yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn yeni_veri() -> String {
    String::from("veri")
}

fn tuket(s: String) -> usize {
    s.len()
}

fn main() {
    let s = yeni_veri();
    let kopya = s.clone();
    let n = tuket(s);
    println!("{} {}", kopya, n);
}

Beklenen çıktı

veri 4

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Aşağıdakilerden hangisi derlenir?

  • let v = vec![1]; let w = v; v.len();
  • Hiçbiri
  • let a = 5; let b = a; println!("{a}"); Doğru cevap
  • let a = String::new(); let b = a; println!("{a}");

Açıklama: i32 Copy olduğu için a geçerli kalır; String ve Vec taşındığı için diğer ikisi E0382 verir.

2 Erken bırak

Soru
let tampon = vec![0u8; 1024];
____(tampon);
Cevap
let tampon = vec![0u8; 1024];
drop(tampon);

Açıklama: drop değeri hemen bırakır; değişken sonra kullanılamaz.

3 Grubun özeti

Kavram Anlamı
Sahip Tek
Taşıma Copy olmayan türler
Kopya Copy türler
clone Açık derin kopya

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma