Rust 中 Rc::clone(&rc) 和 rc.clone() 的区别
在本文中,我们将讨论 Rust 中的 Rc::clone(&rc)
和 rc.clone()
之间的区别。这两个特征都用于克隆或复制对象。
在 Rust 中使用 Rc::clone(&rc)
进行克隆
Rc::clone(&rc)
用于创建一个新的共享引用,而不是克隆引用的底层对象。Rc
代表 Reference Counted
,类型 T
值的共享所有权由类型 Rc<T>
提供,在堆中分配。
usestd::fmt;usestd::rc::Rc;fn print_it<T: fmt::Display>(val: T){println!("{}",val);}fn main(){letgreet=Rc::new("Hello, world".to_string());letborrowed=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 的标准库,这个函数往往会使常见的代码模式容易被误解。
问题在于,可以从详细命名法中受益的更具体的过程和类型只能通过高级或抽象术语访问。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。