Rust的所有权机制,数据允许通过借用的方式,在函数的上下文中传递数据。如果离开数据作用的有效范围,这个借用就会失效,编译就会报错。这也是我们不会将借用(引用)作为函数的返回值的原因。下面的代码编译失败。
fn create_note() -> &Note {
...
}
要将借用的数据传递出其有效范围,要么实现Copy trait,要么实现Clone trait。
这个时候,如果我们要传递的结构体比较大,那么这里的内存复制成本就会随之升高,性能就会有所损耗。
要解决这个问题,可以使用std::rc::Rc
。Rc是Reference Counted的缩写,它在堆上创建数据,其目标是实现数据安全共享。因为Rc的内存是动态在堆上分配的,因此这里也会有一些开销。文章来源:https://www.toymoban.com/news/detail-722843.html
这里就回到了主题,是否使用Rc<T>
。如果我们使用所有权借用的机制来传递数据,且不会发生数据拷贝,那么建议不使用Rc<T>
。如果我们的数据会在不同的上下文中频繁传递,例如,闭包,那么建议使用Rc<T>
。文章来源地址https://www.toymoban.com/news/detail-722843.html
到了这里,关于Rust-是否使用Rc<T>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!