写个简单的例子,看一下 Arc 共享指针的效果。
首先,看看不共享时 Arc 指针的生命周期。在下面例子中,变量 b 在 step 1 之后,离开作用域时释放,析构函数显示 drop。
use std::sync::Arc;
struct Hello {}
impl Drop for Hello {
fn drop(&mut self) {
println!("drop");
}
}
fn main() {
{
let b = Arc::new(Hello {});
println!("step 1");
}
println!("step 2");
}
==== run ====
step 1
drop
step 2
如果我们共享一下变量 b,看看生命周期是否会延长。代码修改如下:
use std::sync::Arc;
struct Hello {}
impl Drop for Hello {
fn drop(&mut self) {
println!("drop");
}
}
fn main() {
let mut a = None;
{
let b = Arc::new(Hello {});
a = Some(b.clone());
println!("step 1");
}
println!("step 2");
}
==== run ====
step 1
step 2
drop
果然,变量 b 中数据的生命周期移到了 a 的作用域结束的地方,尽管变量 b 已经不存在了,其数据依然随 a 而继续生存。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)