有没有办法Rc<T>
在计数为时移动对象1
?我正在考虑如何实现:
fn take_ownership<T>(shared: Rc<T>) -> Result<T, Rc<T>> { ... }
语义是,T
如果计数是1
,你会得到,否则你会回来shared
,所以你可以稍后再试。
有没有办法Rc<T>
在计数为时移动对象1
?我正在考虑如何实现:
fn take_ownership<T>(shared: Rc<T>) -> Result<T, Rc<T>> { ... }
语义是,T
如果计数是1
,你会得到,否则你会回来shared
,所以你可以稍后再试。
标准库提供的Rc::try_unwrap
功能:
fn try_unwrap(this: Rc<T>) -> Result<T, Rc<T>>
Rc
如果恰好有一个强引用,则返回包含的值。否则,
Err
返回与Rc
传入的相同的 an。即使存在未完成的弱引用,这也会成功。
例子
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);