大家好,我是砸锅。一个摸鱼八年的后端开发。熟悉 Go、Lua。第六天还是继续和大家一起学习 Rust😊
今天继续学习一下 Rust 里面很重要的概念:所有权
动态数组因为大小在编译期无法确定,所以放在堆上,并且在栈上有一个包含了长度和容量的胖指针指向堆上的内存
如果一个变量被多次作为参数转递,就会造成多次饮用。堆内存多次引用的问题,有以下这些方案解决:
- 开发者手动处理,自己释放内存。
- 追踪式 GC,定期扫描堆上内存数据是否有人引用,替开发者管理堆内存。
- 使用自动引用计数 ARC,编译期间自动添加维护引用计数的代码,减轻开发者维护堆内存的负担。
Rust 使用所有权来解决这个问题,一个值只能被一个变量所拥有,这个变量被称为所有者。一个值同一时刻只能拥有一个所有者,也就是不能有两个变量拥有相同的值,当所有者离开作用域时,其拥有的值就会被丢弃。 缺点是让代码变得复杂了,导致使用的心智成本提高了。
Move 语义:赋值或者传参会导致值 Move,所有权被转移,一旦所有权转移,之前的变量就不能访问 Copy 语义:如果值实现了 Copy trait,那么赋值或传参会使用 Copy 语义,相应的值会被按位拷贝(浅拷贝),产生新的值。