Rust的Ownership和Reference

一般来说,对于语言特性最全面的描述通常来自官方文档,比如:https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html

这里面向中文用户,强调一下ownership和reference的法则。交互请添加QQ群:418474680

Ownership:

  1. Each value in Rust has a variable that’s called its owner. 每个值都有一个称为“所有者”的变量。
  2. There can only be one owner at a time. 在一个时刻,只能有一个“所有者”。言下之意,可以有不同的所有者轮流持有。
  3. When the owner goes out of scope, the value will be dropped. “所有者”变量走出Scope,对应的值也同时消失。

对于第一条,值由变量持有,但不是没有个变量都持有值,有的变量持有的是引用,持有引用的变量的消失不会引起值的消失。

let v = [1, 2, 3];
{
    let _vv = &v;
    assert_eq!(_vv.len(), 3);
    // _vv走出Scope不会导致v持有的值的消失。
}

对于第二条,如何解释Rc?也是被一个变量a持有。

enum List {
    Cons(i32, Rc<List>),
    Nil,
}

use List::{Cons, Nil};
use std::rc::Rc;

fn main() {
    let a = Rc::new(Cons(5, Rc::new(Cons(10, Rc::new(Nil)))));
    let b = Cons(3, Rc::clone(&a));
    let c = Cons(4, Rc::clone(&a));
}

Reference:

  1. At any given time, you can have either one mutable reference or any number of immutable references. 在任何时刻,可以借出任意数量的只读引用,但只能由一个可写引用。
  2. References must always be valid. 引用必须是可用的。就是在该引用存在的周期内,被引用对象必须是可用的。

如果借出多个可写引用,编译器会报错。下图中的v。

在closure环境下,借用关系会变得看起来很复杂,但是借助编译器的帮助,牢记这些法则,总归能够理出头绪。同时,不管对象看起来如何复杂,最终都会归结到String和Bytes,所有的对象都是可手工Copy的,记住这一点你会在Rust编程的路上走得更远。

转载于:https://my.oschina.net/jianglibo/blog/3010881

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值