有没有办法将物体从Rc<T>
当计数为1
?我正在考虑如何实施:
fn take_ownership<T>(shared: Rc<T>) -> Result<T, Rc<T>> { ... }
语义是你得到T
如果计数是1
然后你回来shared
否则您可以稍后重试。
标准库提供了Rc::try_unwrap https://doc.rust-lang.org/std/rc/struct.Rc.html#method.try_unwrap功能:
fn try_unwrap(this: Rc<T>) -> Result<T, Rc<T>>
返回包含的值,如果Rc
恰好有一个强
参考。
否则,一个Err
返回相同的Rc
那是被传入的。
即使存在突出的弱引用,这也会成功。
Examples
use std::rc::Rc;
let x = Rc::new(3);
assert_eq!(Rc::try_unwrap(x), Ok(3));
let x = Rc::new(4);
let _y = Rc::clone(&x);
assert_eq!(*Rc::try_unwrap(x).unwrap_err(), 4);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)