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

题目

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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!