老实说我还真的想不到要写啥了,有关基础语法,真的很难想欸QQ
拜托来个人给我点想法吧 QQQQQQQQ
然後我在想是不是字数不超过 2000 那天就在水 希望大家看到都能够理解我说的内容
喔对 大家都不爱复习 QQ Leetcode 那篇有教一些小地方 我前面忘记讲的可以去看看。
今天就来讲一下智慧指标吧,後面 unsafe 应该会讲到原生指标,如果我记得的话。
然後我先讲,我没有学过 C++ 的智慧指标,所以不会提及有关 C++ 纯粹个人理解。
那就开始ㄅ owob
先对比一下 原生指标 跟 智慧指标 吧
在 Rust 中最简单的智慧指标是 Box 所以我之前好像讲某个东西的时候重复命名了 QQ 没注意到sor
建立方式如下
let owo = Box::new(87);
那 Box 简单讲主要是将数值分配到 heap 上而不是 stack。
Box 的功能其实偏少,也代表了他占用的效能其实不多。跟一般的指标差别只在分配位置。
使用的场合主要分成三类:
老实说,这边到底谁看得懂 QQ
所以下面就来举例吧
递回型别
这个应该显而易见,无法知道确切大小的型别。
就直接拿官方的"直白的"例子吧!
Cons List
这个的概念会是建立一个容器并且将元素 x 作为此容器开头并以元素 y 作为此容器结尾
上面所说 x 跟 y 是传入值ㄛ 他都会包含两个元素
那如果说到底了,就会包含一个 Nil
好了 所以我们就定义一个 enum 实现上面所说的东西吧!
如果昨天的有认真看应该知道怎麽用吧 不然就我写太烂 呜呜
enum List {
Cons(i32, List),
Nil,
}
可以发现 List 那这样就会递回下去ㄌ
引用之後编译会发现一堆报错
要怎麽解决呢 靠上面的 Box 阿
这样的话他就不会认定为是一个递回形式了,也就是以 Box 取代了原本的形式
enum List {
Cons(i32, Box<List>),
Nil,
}
那这样使用的时候就不会出错了 owob
蛤 不知道怎麽传入ㄇ 那我附给你好了
let Cons_List = Cons(1, Box::new(Cons(2, Box::new(Cons(3, Box::new(Nil))))));
那当他的数值离开作用域之後也会自动回收,这就是智慧指标
这边最後在讲个
fn k() {
let a = Box::new(5);
//let b = a; 会报错
let b = *a; // 这样才能传输所有权
}
这边在介绍一个 Rc 的智慧指标
Rc 可以将多个所有权共用多个变数
每当多了一个计数就会加一。
use std::rc::Rc;
fn main() {
let a = Rc::new(50);
let b = a.clone();
let c = a.clone();
println!("{}", Rc::strong_count(&a));
}
这个会输出 3
但是需要注意的是,这个只能在单一 thread 中运用,多线程可能之後会说明吧(?
let owo = Rc::downgrade(&a);
println!("{}", Rc::strong_count(&a));
那加上这两行会输出甚麽, Ans: 3
一样是 3 为啥,因为他是强参考的计数而不是弱参考的计数,owo 是属弱参考
弱参考是 Rc 的另一个版本 Weak
他所共用的指标并没有所有权,但是还是保留着前面 Rc 的参考。
今天大概就这样,我得说 智慧指标 这东西我真的没用过,所以这次翻书的时间长了很多。
可能有蛮多地方讲得不好的,深感抱歉。
可是这个形式真的还不错,边写文章边学习。
这边有问题的可能我没办法回答 QQ 能力不够
然後真的开始觉得累 呜呜
引用我朋友的一句话
本次参考资源:
<<: Day 1 : 前言+本系列会使用到的东西(vscode、xampp、virtualbox、ubuntu、python安装说明)
好的,今天我们要来看的就是我们的精华啦-聊天室。 原本我们在设计邀约流程的时候是。 (原本设想的流程...
前言 Hello 大家好我是 Larry,去年休息一次後今年决定再度参战,这也是我第三次参加铁人赛了...
今天需要疗癒的视觉效果,Menu 再等等.. 跳脱进度,想先做网站 Favicon 的设计 (其实是...
在经过了多日有一天没一天的研究、写Code与写作,今天假日花了一点时间将原本从Jupyter Not...
在一开始整理观察到常见的痛点们,你看到的是想解决的地方,也可以换个角度去思考,其实你想要保持是你的信...