rust-quiz:019-dropped-by-underscore.rs

godme發表於2022-07-14
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 協議》,轉載必須註明作者和本文連結

相關文章