<T> 当计数为 1 时,有条件地将 T 从 Rc 移出



有没有办法在计数1时从Rc<T>中移动对象?我正在考虑如何实现:

fn take_ownership<T>(shared: Rc<T>) -> Result<T, Rc<T>> { ... }

语义是,如果计数1,你会得到T,否则你会得到shared,以便稍后重试。

标准库提供Rc::try_unwrap函数:

fn try_unwrap(this: Rc<T>) -> Result<T, Rc<T>>

返回包含的值(如果Rc只有一个强值( 参考。

否则,将返回Err,其Rc与传入的相同。

即使存在突出的弱引用,这也将成功。

例子

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);

相关内容

  • 没有找到相关文章

最新更新