Rust:简单的例子试验 Arc 共享指针

Rust:简单的例子试验 Arc 共享指针,第1张

写个简单的例子,看一下 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 而继续生存。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/867926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存