Drop
特徵
如果值實作了 Drop
,即可在超出範圍時指定要執行哪個程式碼:
struct Droppable { name: &'static str, } impl Drop for Droppable { fn drop(&mut self) { println!("Dropping {}", 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!("Exiting block B"); } println!("Exiting block A"); } drop(a); println!("Exiting main"); }
討論要點:
- 為什麼
Drop::drop
不使用self
?- 簡答:如果這樣的話,系統會在 區塊結尾呼叫
std::mem::drop
,進而觸發另一個對Drop::drop
的呼叫並造成堆疊 溢位!
- 簡答:如果這樣的話,系統會在 區塊結尾呼叫
- 請嘗試將
drop(a)
替換為a.drop()
。