Sahiplik nedir?
- Rust kursu
- Başlangıç
- Ders 42/115
- 4 dk
Sahiplik (ownership) kurallarının ne işe yaradığını öğrenirsin.
Sahiplik nedir?
Sahiplik Rust'ın bellek yönetim modelidir ve üç kurala dayanır:
- Her değerin bir sahibi vardır (bir değişken).
- Aynı anda yalnızca bir sahip olabilir.
- Sahip kapsam dışına çıkınca değer otomatik olarak bırakılır (drop).
{
let s = String::from("merhaba"); // s sahip
println!("{s}");
} // kapsam bitti: s drop edilir, bellek serbestÇöp toplayıcı yoktur ve elle free yazılmaz; derleyici bırakma noktasını kendisi yerleştirir.
Drop trait'i
Bir türe Drop uygulayarak bırakılırken ne olacağını görebilirsin; dosya kapatma, kilit açma gibi temizlikler böyle otomatikleşir:
struct Kaynak(&'static str);
impl Drop for Kaynak {
fn drop(&mut self) {
println!("{} bırakıldı", self.0);
}
}
let _a = Kaynak("a");
let _b = Kaynak("b");
// kapsam sonu: önce b, sonra a bırakılır (ters sıra)Uygulama Bırakma sırası
Yukarıdaki Kaynak türünü ve Drop uygulamasını yaz. main içinde let _a = Kaynak("a");, let _b = Kaynak("b"); tanımla ve println!("main bitiyor"); yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
struct Kaynak(&'static str);
impl Drop for Kaynak {
fn drop(&mut self) {
println!("{} bırakıldı", self.0);
}
}
fn main() {
let _a = Kaynak("a");
let _b = Kaynak("b");
println!("main bitiyor");
}Beklenen çıktı
main bitiyor b bırakıldı a bırakıldı
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir <code>String</code>'in belleği ne zaman serbest bırakılır?
- Program bitince
- GC çalışınca
- free çağrılınca
- Sahibi kapsam dışına çıkınca Doğru cevap
Açıklama: Kapsamın sonunda derleyici drop çağrısını otomatik ekler; bu, C++'taki RAII fikrinin Rust karşılığıdır.
2 Temizlik yöntemi
impl Drop for Dosya {
fn ____(&mut self) {
println!("kapatıldı");
}
}
impl Drop for Dosya {
fn drop(&mut self) {
println!("kapatıldı");
}
}
Açıklama: Drop trait'inin tek yöntemi drop'tur ve kapsam sonunda çağrılır.
3 Kural
| Kavram | Anlamı |
|---|---|
Bir sahip |
Her değer için |
Kapsam sonu |
Otomatik drop |
Drop trait |
Özel temizlik |
Ters sıra |
Son tanımlanan önce bırakılır |