Rust 中的 Rc::clone(&rc) 和 rc.clone() 有什么区别吗?是否有基于此的编译优化?

rou*_*san 18 rust

我注意到 Rust 书建议使用Rc::clone(&rc)如下rc.clone()

use std::rc::Rc;

let five = Rc::new(5);

// recommended
let _ = Rc::clone(&five);

// not recommended
let _ = five.clone();

Run Code Online (Sandbox Code Playgroud)

为什么?

Sha*_*ger 20

函数语法 ( Rc::clone(&rc)) 清楚地表明您只是创建一个新的共享引用(便宜),而不是克隆被引用的底层对象(可能昂贵)。对于任意引用计数类型,可能不清楚是否发生浅复制或深复制。

这个可读性/清晰度问题导致了对用于克隆引用计数指针类型的单独接口的建议当通过方法克隆引用计数类型时,linter 现在会发出警告