std::rc::Weak<T>
的定义如下:
pub struct Weak<T: ?Sized> {
ptr: NonNull<RcBox<T>>,
}
在我的理解中,当没有更多的Rc<T>
个时,RcBox<T>
个将被释放,Weak<T>.ptr
个现在指向一个可能包含任何东西的地方.那么,当在Weak<T>
上调用upgrade()
时,它如何知道指针现在是无效的?
Weak<T>::upgrade
具有以下实现:
pub fn upgrade(&self) -> Option<Rc<T>> {
let inner = self.inner()?;
if inner.strong() == 0 {
None
} else {
unsafe {
inner.inc_strong();
Some(Rc::from_inner(self.ptr))
}
}
}
这是否意味着,当野生动物中没有Rc<T>
只时,RcBox<T>
只就不是真正的自由了?如果是这样的话,这不会泄露内存吗?