Rust-是否使用Rc<T>

Rust的所有权机制,数据允许通过借用的方式,在函数的上下文中传递数据。如果离开数据作用的有效范围,这个借用就会失效,编译就会报错。这也是我们不会将借用(引用)作为函数的返回值的原因。下面的代码编译失败。

rust 复制代码
fn create_note() -> &Note {
  ...
}

要将借用的数据传递出其有效范围,要么实现Copy trait,要么实现Clone trait。

这个时候,如果我们要传递的结构体比较大,那么这里的内存复制成本就会随之升高,性能就会有所损耗。

要解决这个问题,可以使用std::rc::Rc。Rc是Reference Counted的缩写,它在堆上创建数据,其目标是实现数据安全共享。因为Rc的内存是动态在堆上分配的,因此这里也会有一些开销。

这里就回到了主题,是否使用Rc<T>。如果我们使用所有权借用的机制来传递数据,且不会发生数据拷贝,那么建议不使用Rc<T>。如果我们的数据会在不同的上下文中频繁传递,例如,闭包,那么建议使用Rc<T>

相关推荐
你脸上有BUG2 分钟前
Css实现悬浮对角线边框动效
前端·css·动画
烛阴17 分钟前
开发者神器:如何在浏览器控制台玩转第三方库,让调试效率翻倍!
前端·javascript
crary,记忆26 分钟前
Module Federation 和 Native Federation 的比较
前端·webpack·angular
why技术32 分钟前
翻译翻译,什么叫“编程专用”的显示器?
前端·后端
tkevinjd1 小时前
C++中线程库的基本操作
开发语言·c++
CodeWithMe1 小时前
【C/C++】不同防止头文件重复包含的措施
c语言·开发语言·c++
拉不动的猪1 小时前
JQ常规面试题
前端·javascript·面试
子豪-中国机器人1 小时前
C++ 信息学奥赛总复习题答案解析
开发语言·c++·算法
海上彼尚1 小时前
Monorepo + PNPM 搭建高效多项目管理
前端·js·源代码管理
oioihoii1 小时前
C++11列表初始化:从入门到精通
java·开发语言·c++