2018-08-12 22:03 更新

既然我們已經(jīng)討論了特征,讓我們談?wù)?Rust 標(biāo)準(zhǔn)庫提供的特定特征,降降特性提供了一種方法,這種方法可以保證即便某個值超出范圍時也能運行代碼。例如:

struct HasDrop;

impl Drop for HasDrop {
fn drop(&mut self) {
println!("Dropping!");
}
}

fn main() {
let x = HasDrop;

// do stuff

} // x goes out of scope here

當(dāng) x 在 main()函數(shù)結(jié)尾超出范圍時,降的代碼將運行。降有一個方法,該方法也被稱為 drop()。它將 self 作為可變參考。

這正是我們想要的!降的機制是非常簡單的,但是有一些微妙之處。例如,值以與它的聲明相反的順序下降。這里還有一個例子:

struct Firework {
strength: i32,
}

impl Drop for Firework {
fn drop(&mut self) {
println!("BOOM times {}!!!", self.strength);
}
}

fn main() {
let firecracker = Firework { strength: 1 };
let tnt = Firework { strength: 100 };
}

這將輸出:

BOOM times 100!!!

BOOM times 1!!!

TNT 在爆竹之前爆炸,因為它是之后被聲明的。后進(jìn)先出。

那降有什么優(yōu)點呢?一般來說,降是用來清理任何與結(jié)構(gòu)相關(guān)聯(lián)的資源。例如,ARC<T> TYPE 類型是一個引用計數(shù)的類型。調(diào)用降時,它將減量引用計數(shù),如果引用的總數(shù)為零,它將清理潛在值。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號