struct S;
impl Drop for S {
fn drop(&mut self) {
print!("1");
}
}
fn main() {
let s = S;
let _ = s;
print!("2");
}
drop
當值的生命週期結束的時候就會呼叫drop
。
記住,這裡的生命週期針對的,並不是引用,或者變數名,而是針對值而言的。
生命週期,直白的說出來,就是對應的引用。
當引用全部剝離,意味著生命週期到頭了。
生命週期的長短也就對應著引用的存活時間。move
還有一種情況會呼叫drop
,也就是發生了move
。-
我們使用_
標識忽略,但並不是直接進行了回收操作。
只是標識後續不使用,並不立即進行回收。
在這裡,_
並不進行回收操作,因此列印的是21
。
還可以驗證一下我們的理解。
struct S {
a: i32
}
impl Drop for S {
fn drop(&mut self) {
print!("{}", self.a);
}
}
fn main() {
let mut s = S {a : 1};
s = S { a: 2};
print!("3");
}
這裡列印132
,因為1
被頂替,失去了引用,也就結束了生命週期。
21
本作品採用《CC 協議》,轉載必須註明作者和本文連結