Drop Özelliği
Drop özelliğini gerçekleştiren (implement) değerler, kapsam (scope) dışına çıktıklarında çalışacak kodu belirtebilirler:
struct Droppable { name: &'static str, } impl Drop for Droppable { fn drop(&mut self) { println!("{} düşürülüyor", self.name); } } fn main() { let a = Droppable { name: "a" }; { let b = Droppable { name: "b" }; { let c = Droppable { name: "c" }; let d = Droppable { name: "d" }; println!("En içteki bloktan çıkılıyor"); } println!("Sonraki bloktan çıkılıyor"); } drop(a); println!("main'den çıkılıyor"); }
This slide should take about 8 minutes.
std::mem::drop’unstd::ops::Drop::dropile aynı olmadığını unutmayın.- Değerler kapsam dışına çıktıklarında otomatik olarak düşürülür (drop).
- Bir değer düşürüldüğünde,
std::ops::Drop’u gerçekleştiriyorsa,Drop::dropgerçekleştirmesi çağrılır. Drop’u gerçekleştirip gerçekleştirmediğine bakılmaksızın tüm alanları da düşürülür.std::mem::dropsadece herhangi bir değeri alan boş bir fonksiyondur. Önemi, değerin sahipliğini (ownership) almasıdır, bu yüzden kapsamının (scope) sonunda düşürülür (drop). Bu, değerleri normalde kapsam dışına çıkacaklarından daha erken bir zamanda açıkça düşürmenin uygun bir yoludur.- Bu,
dropüzerinde bir miktar iş yapan nesneler için yararlı olabilir: kilitleri bırakma, dosyaları kapatma vb.
- Bu,
Tartışma noktaları:
Drop::dropnedenselfalmaz?- Kısa cevap: Eğer alsaydı, bloğun sonunda
std::mem::dropçağrılır, bu daDrop::drop’a başka bir çağrıya ve bir yığın taşmasına (stack overflow) neden olurdu!
- Kısa cevap: Eğer alsaydı, bloğun sonunda
drop(a)’yıa.drop()ile değiştirmeyi deneyin.