我希望在其他几个具有提取数据能力的结构之间共享一个结构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
}我不需要多线程。
Rc<RefCell<Foo>>是我想要的吗?Deref for Rc + RefCell::borrow_mut + Option::take,还是一些更简单的方法来实现我想要的?
发布于 2017-08-14 13:33:49
是否有可从中窃取数据的共享指针?
没有,但是你已经拥有了所有你需要创建的积木。因为你
RefCell提供的内部可更改性。Rc。Option。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!")
}
}如果你喜欢的话,你可能可以把所有这些都打包成一种类型。
另请参阅:
https://stackoverflow.com/questions/45675506
复制相似问题