首页 > 其他分享 >智能指针带来Rust规则改变

智能指针带来Rust规则改变

时间:2022-08-21 20:55:25浏览次数:70  
标签:借用 Cell 智能 规则 RefCell Rust 指针

可以将所有权、借用规则与这些智能指针做一个对比

Rust 规则 智能指针带来的额外规则
一个数据只有一个所有者 Rc/Arc让一个数据可以拥有多个所有者
要么多个不可变借用,要么一个可变借用 RefCell实现编译期可变、不可变引用共存
违背规则导致编译错误 违背规则导致运行时panic

选择 Cell 还是 RefCell

大概总结下两者的区别:

  • Cell 只适用于 Copy 类型,用于提供值,而 RefCell 用于提供引用
  • Cell 不会 panic,而 RefCell 会

与 Cell 的 zero cost 不同,RefCell 其实是有一点运行期开销的,原因是它包含了一个字大小的“借用状态”指示器,该指示器在每次运行时借用时都会被修改,进而产生一点开销。

总之,当非要使用内部可变性时,首选 Cell,只有你的类型没有实现 Copy 时,才去选择 RefCell。

标签:借用,Cell,智能,规则,RefCell,Rust,指针
From: https://www.cnblogs.com/ellabrain/p/16610853.html

相关文章

  • 人工智能应用落地的两难
      一直以来,人工智能难以落地的讨论不绝于耳。一方面是各高校研究机构,层出不穷的模型和算法,不断刷新着各项指标,另一方面,却迟迟不见这些最新的科研成果转化落地。 ......
  • springboot多线程环境下注入bean空指针问题解决
    多线程环境下注入bean会出现空指针了..我是怎么知道这个bean有有没有在启动的时候注入进来的呢?用于指示bean包含在SpringApplication中时应该运行的接口。多个CommandL......
  • C语言学习指针一
    #include<stdio.h>main(){inta,b,c;int*e;intd[2]={0};e=&a;printf("%d,%d\n",a,&a);printf("%d,%d\n",a,a);printf("%d,%d\n"......
  • C++指针
    两种声明方式int*p=newint;*p=1000;inta=1000;int*p=&a;数组名和指针的区别指针的值可以修改,数组名是常量。pointerName=pointerName+1;//v......
  • 报告分享|2022年智能汽车云服务:汽车产业智能网联升级
    全文链接:http://tecdat.cn/?p=28277 原文出处:拓端数据部落公众号 报告分享|2022年智能汽车云服务:汽车产业智能网联升级在汽车"新四个现代化"的特定浪潮中,我们的......
  • Rust编程基础知识
    1.一般Rust源代码的后缀名是使用.rs表示。源码一定要注意使用utf-8编码。2.代码注释用//,一般用//注释单行,也就是行注释,块注释使用/*和*/包围。3.fn是一个关键字(keyword),......
  • RUST基础:类型别名
    Rust基础入门书籍推荐《深入浅出RUST》我们可以用type关键字给同一个类型起个别名(typealias)。实例如下:1typeAge=u32;23fngrow(age:Age,year:u32)->Age{......
  • 解决测试代码时,产生的空指针错误
    错误类型如下:  在进行代码测试的时候,莫名其妙的空指针报错解决方法:具体问题具体分析,此时的测试代码,是测试路由反馈,我没有使用air打开网站服务,于是遇到如上所见的......
  • C语言指针与函数相关编程实例练习题
    指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。本......
  • 美团笔试(2022.08.20)烤串 【字符串】【双指针】
    字符串双指针的一道简单题不过过程中遇到小问题本题与力扣1768的交替合并字符串一样算法不提主要是ACM模式下的输入输出问题:我写的是intin=0; cin>>i......