该std::rc文件说:
Rc<T>自动取消引用T(通过Dereftrait)
并且
Weak<T>不会自动取消引用T,因为内部值可能已经被删除。
因此,除了为upgrade()要返回的弱指针提供一个选项外Option<Rc<T>>,如果Deref标准库中有一个关于弱返回的Option<T>实现,它会导致任何问题吗?
因此,除了提供一个选项来 upgrade() 返回 Option> 的弱指针之外,如果标准库中的 Deref 实现返回 Option 是否会导致任何问题?
如果您查看 Deref 的定义,您将看到:
pub trait Deref {
type Target: ?Sized;
fn deref(&self) -> &Self::Target;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我们定义type Target = Option<T>forWeak我们必须返回 an &Option<T>,这意味着我们必须返回对位于Option其他地方的an 的引用。这Weak是不可能的,因为没有Option任何地方可以使用它。
这个想法还有其他问题:
Option<T>手段Option 拥有的T,这意味着我们必须移动的T出来的Weak,这显然是无稽之谈(作为一个Weak没有自己的项目几乎根据定义)。Rc和 a之间没有静态关系Weak,假设可以取消引用' toOption<&T>相反,您可以通过降级 Rc,获取引用,然后删除 Rc 来获得一个悬空指针:Weak仍然存在,Option不能从下改变你,所以你得到了Some(&T)一个T已经被丢弃的。这就是upgrade返回 an的原因Rc,这可以确保如果您在调用时仍然有一个活着的 Rc,那么upgrade您现在可以独立地保持它活着。
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |