首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可从中窃取数据的共享指针?

是否有可从中窃取数据的共享指针?
EN

Stack Overflow用户
提问于 2017-08-14 13:21:20
回答 1查看 71关注 0票数 1

我希望在其他几个具有提取数据能力的结构之间共享一个结构Foo。这一结构的所有其他持有者都将看到这种价值消失。

伪码:

代码语言:javascript
复制
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 
}

我不需要多线程。

Rc<RefCell<Foo>>是我想要的吗?Deref for Rc + RefCell::borrow_mut + Option::take,还是一些更简单的方法来实现我想要的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-14 13:33:49

是否有可从中窃取数据的共享指针?

没有,但是你已经拥有了所有你需要创建的积木。因为你

  • 要更改值,您需要RefCell提供的内部可更改性。
  • 要想共享所有权,就需要Rc
  • 要想有有价值或没有价值的可能性,您需要Option
代码语言:javascript
复制
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!")
    }
}

如果你喜欢的话,你可能可以把所有这些都打包成一种类型。

另请参阅:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45675506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档