为何Rc::downgrade参数用this: &Self而非&self,Weak::upgrade却相反?
Rc::downgrade与Weak::upgrade参数形式差异的原因
对于
Rc::downgrade:
Rc实现了 Deref<Target=T>,如果它用&self作为参数,调用rc.downgrade()时会触发Rust的解引用多态(Deref coercion),自动把&Rc<T>转换成&T——但downgrade需要操作的是Rc实例本身的引用,而非内部包裹的T的引用。用this: &Self这种关联函数写法,会绕过自动解引用逻辑,必须明确传入&Rc<T>,确保操作对象是Rc本身,避免意外的解引用错误。对于
Weak::upgrade:
Weak并没有实现 Dereftrait,调用weak.upgrade()时,&self就是&Weak<T>,不存在自动解引用成内部类型的问题。因此可以安全使用常规的方法调用形式,不需要用this: &Self来规避解引用问题。
内容的提问来源于stack exchange,提问作者Philipp Mildenberger
相关产品推荐
相关产品推荐

