Rust 是否存在可以从中窃取数据的共享指针?

Rust 是否存在可以从中窃取数据的共享指针?,rust,Rust,我想在其他几个结构之间共享一个结构Foo 能够提取这些数据。这一结构的所有其他持有者将看到价值消失 伪代码: if boo.ref_to_foo.is_valid() { let foo: Foo = boo.ref_to_foo.steal(); //1 } else { //after executing 1 one time all come here } 我不需要多线程 这是我想要的吗?Deref for Rc+RefCell::借用\ mut+选项::take,或者用更

我想在其他几个结构之间共享一个结构Foo 能够提取这些数据。这一结构的所有其他持有者将看到价值消失

伪代码:

if boo.ref_to_foo.is_valid() {
   let foo: Foo = boo.ref_to_foo.steal(); //1
} else {
   //after executing 1 one time all come here 
}
我不需要多线程

这是我想要的吗?Deref for Rc+RefCell::借用\ mut+选项::take,或者用更简单的方法实现我想要的

是否存在可以从中窃取数据的共享指针

没有,但是您已经拥有创建一个所需的所有构建块。自从你

要更改该值,需要RefCell提供的内部可变性。 想要分享所有权,你需要Rc。 想要有一个有价值或没有价值的可能性,你需要选择。 如果您喜欢,您可能可以将所有这些都打包成一种类型

另见:

是否存在可以从中窃取数据的共享指针

没有,但是您已经拥有创建一个所需的所有构建块。自从你

要更改该值,需要RefCell提供的内部可变性。 想要分享所有权,你需要Rc。 想要有一个有价值或没有价值的可能性,你需要选择。 如果您喜欢,您可能可以将所有这些都打包成一种类型

另见:

use std::rc::Rc;
use std::cell::RefCell;

struct Foo;

fn main() {
    let foo1 = Rc::new(RefCell::new(Some(Foo)));
    let foo2 = foo1.clone();

    if foo1.borrow().is_some() {
        let stolen = foo1.borrow_mut().take();
    } else {
        println!("Already stolen!")
    }

    if foo2.borrow().is_some() {
        let stolen = foo2.borrow_mut().take();
    } else {
        println!("Already stolen!")
    }
}