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 协议》,转载必须注明作者和本文链接
推荐文章: