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

本文探讨了Rust编程语言中的所有权概念,解释了每个值只有一个所有者,当所有者离开作用域时值会被丢弃。Rust通过所有权实现堆内存回收,避免使用垃圾收集器。详细介绍了堆上变量(如Box)的转移所有权特性,以及基本数据类型(如i32)的拷贝语义。举例展示了如何在不同变量间转移所有权以及拷贝语义的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,信息如下:


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值