sxy15 / ISSUE

MIT License
1 stars 0 forks source link

rust 学习备注 #5

Open sxy15 opened 8 months ago

sxy15 commented 8 months ago
  1. 在 Rust 中哪些类型默认是做移动所有权操作,哪些类型默认是做复制所有权操作呢?
    默认做复制所有权的操作的有 7 种
    所有的整数类型,比如 u32;
    布尔类型 bool;
    浮点数类型,比如 f32、f64;
    字符类型 char;
    由以上类型组成的元组类型 tuple,如(i32, i32, char);
    由以上类型组成的数组类型 array,如 [9; 100];
    不可变引用类型 &;

    其他类型默认都是做移动所有权的操作。

sxy15 commented 8 months ago
  1. 引用(借用)的一些规则 知识点
    
    所有权型变量的作用域是从它定义时开始到所属那层花括号结束。
    引用型变量的作用域是从它定义起到它最后一次使用时结束。
    引用(不可变引用和可变引用)型变量的作用域不会长于所有权变量的作用域。不然就会出现悬锤引用。
    一个所有权型变量的不可变引用可以同时存在多个,可以复制多份。
    一个所有权型变量的可变引用与不可变引用的作用域不能交叠,也可以说不能同时存在。
    对同一个所有权型变量的可变借用之间的作用域不能交叠。
    在有借用存在的情况下,不能通过原所有权型变量对值进行更新。

对于多级可变引用,要利用可变引用去修改目标资源的值的时候,需要做正确的多级解引用操作。 只有全是多级可变引用的情况下,才能修改到目标资源的值。

总结

在同一时刻,同一个所有权变量的不可变引用和可变引用两者不能同时存在,不可变引用可以同时存在多个。 可变引用具有排它性,只能同时存在一个。 不可变引用可以被任意复制多份,但是可变引用不能被复制,只能转移,这也体现了可变引用具有一定的所有权特征。

sxy15 commented 7 months ago

所有权:

Move语义:赋值或者传参会导致值 Move,所有权被转移,一旦所有权转移,之前的 变量就不能访问 Copy语义:如果值实现了 Copy trait,那么赋值或传参会使用 Copy 语义,相应的值会被按位拷贝(浅拷贝),产生新的值