Rust 中 Rc::clone(&rc) 和 rc.clone() 的区别
Nilesh Katuwal
2023年1月30日
2022年5月18日
在本文中,我们将讨论 Rust 中的 Rc::clone(&rc)
和 rc.clone()
之间的区别。这两个特征都用于克隆或复制对象。
在 Rust 中使用 Rc::clone(&rc)
进行克隆
Rc::clone(&rc)
用于创建一个新的共享引用,而不是克隆引用的底层对象。Rc
代表 Reference Counted
,类型 T
值的共享所有权由类型 Rc<T>
提供,在堆中分配。
use std::fmt;
use std::rc::Rc;
fn print_it<T: fmt::Display>(val: T) {
println!("{}", val);
}
fn main(){
let greet = Rc::new("Hello, world".to_string());
let borrowed = Rc::clone(&greet);
print_it(greet);
print_it(borrowed);
}
输出:
Hello, world
Hello, world
我们已经通过使用 use
语句在上面编写的代码中显示了 Rc
的范围。然后,使用原始字符串创建与函数相关的 Rc
类型::new()
。
稍后使用另一个相对函数创建引用::clone()
用于原始 greet:RC
(这与初始引用不同,即&greet
)。我们尝试使用此代码的函数 print_it
打印引用变量和原始变量。
Rc::clone
的执行不会像大多数类型的克隆执行那样对数据进行深层复制。数据的深拷贝可能需要大量时间。
通过将 Rc::clone
用于引用计数,我们可以识别克隆的深拷贝类型以及增加引用计数的类型。在搜索代码中的执行问题时,我们需要考虑深拷贝克隆并忽略对 Rc::clone
的调用。
Rust 中的 rc.clone()
clone()
函数创建一个新的拥有的句柄,它可以移动到一个新线程。根据 Rust 的标准库,这个函数往往会使常见的代码模式容易被误解。
问题在于,可以从详细命名法中受益的更具体的过程和类型只能通过高级或抽象术语访问。