[Rust]多变量同时声明以及变量的所有权

Rust中的变量有一个叫做所有权的概念。此概念的官网介绍如下:

  1. Rust 中的每一个值都有一个被称为其 所有者(owner)的变量。
  2. 值有且只有一个所有者。
  3. 当所有者(变量)离开作用域,这个值将被丢弃。

*以上来自网站: https://kaisery.github.io/trpl-zh-cn/ch04-01-what-is-ownership.html

在Rust中,String,Vec<T>等数据类型是放在heap上面的,他们都实现了drop trait,有点类似于C++的destructor,当变量离开作用域的时候,会自动call 变量实现的drop trait,将变量从heap中清除。因此,Rust得以在不使用GC的情况之下实现堆内存回收。

与此同时,在堆上面的变量一般都满足move semantic,根据我的理解,此性质跟C++也非常类似。当我们把一个存放在堆上面的变量赋值给同样类型的变量的时候,Rust实际上是把值的ownership给move给了新的变量,而不是把值再copy一遍。当变量的所有权move之后,原变量就不再享有值的所有权。比如:

  	let s = String::from("good");
    let b = s;
    println!("{}",s);

上述代码会产生compiling error,信息如下:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Rust所有权系统是其最显著的特性之一,它通过一系列规则和机制确保内存安全、避免数据竞争和资源泄漏。下面是对 Rust 所有权的详细解释: 1. 所有权规则: - Rust 中的每个值都有一个被称为“所有者”的变量。 - 任何时候,一个值只能有一个所有者。 - 当所有者超出其作用域时,该值将被释放。 2. 移动语义: - 当将一个值赋值给另一个变量时,它的所有权会被移动。 - 移动所有权意味着原始变量将无效,不能再使用它。 - 这样可以防止多个变量同时访问同一个内存,避免了数据竞争。 3. 借用语义: - 如果需要在不移动所有权的情况下访问值,可以使用“借用”机制。 - 借用通过引用来实现,引用允许临时地借用值的所有权。 - 在借用的作用域结束后,原始所有者仍然保持对值的所有权。 4. 可变性: - 默认情况下,变量是不可变的,不能修改其所指向的值。 - 如果需要修改一个值,必须使用 `mut` 关键字声明可变变量。 - 可变引用和不可变引用不能同时存在,以避免数据竞争。 5. 生命周期: - 生命周期是 Rust 的一个重要概念,用于跟踪引用的有效性。 - 生命周期注解可以标识引用的生命周期,以确保引用在其所指向的值仍然有效时使用。 - 生命周期注解在函数签名和结构体定义中使用,以确保引用的正确使用。 通过这些所有权规则和机制,Rust 在编译时静态地检查内存安全性,并防止常见的错误,如空指针引用、野指针、使用已释放的内存等。这使得 Rust 成为一种非常安全且高效的编程语言,特别适合开发系统级软件和并发应用程序。 需要注意的是,所有权系统对于初学者可能会有一定的学习曲线,但一旦掌握了所有权的概念和规则,编写安全且高效的 Rust 代码将变得更加容易。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值