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>

相关推荐
茂茂在长安几秒前
Linux 命令大全完整版(11)
java·linux·运维·服务器·前端·centos
MSTcheng.1 分钟前
【C语言】指针(5)
c语言·开发语言
╮壞孩子的天2 分钟前
C语言多人聊天室 ---chat(客户端聊天)
c语言·开发语言
IT猿手13 分钟前
2025高维多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维路径规划,MATLAB代码
开发语言·人工智能·算法·机器学习·matlab·无人机·cocos2d
呱牛do it17 分钟前
Python Matplotlib图形美化指南
开发语言·python·matplotlib
pianmian120 分钟前
python制图之小提琴图
开发语言·python·信息可视化
水瓶丫头站住20 分钟前
Qt中QRadioButton的使用
开发语言·qt
非 白27 分钟前
【Java】代理模式
java·开发语言·代理模式
知识分享小能手33 分钟前
Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)
开发语言·前端·javascript·学习·前端框架·html·html5
IT、木易36 分钟前
大白话React第二章深入理解阶段
前端·javascript·react.js