ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Rust中变量的移动move

2022-01-24 18:00:07  阅读:122  来源: 互联网

标签:变量 -- s2 s1 move let Rust String


示例程序:

fn main() {
    let s1 = String::from("yuyoubei");
    let s2 = s1;
    println!("s1 = {}", s1);
}

运行这段程序会报错,报错信息如下:

error[E0382]: borrow of moved value: `s1`
 --> src\main.rs:4:25
  |
2 |     let s1 = String::from("yuyoubei");
  |         -- move occurs because `s1` has type `String`, which does not implement the `Copy` trait
3 |     let s2 = s1;
  |              -- value moved here
4 |     println!("s1 = {}", s1);
  |                         ^^ value borrowed here after move

原因是由于String的存储形式,它的ptr指针指向了存储在堆内存上的字符串。而Rust不会显式地拷贝堆内存上的内容。取而代之的是使用 移动(move),将s1的内容转给了s2。

这就避免了一个 二次释放 的问题,因为将 s1 的内容移动给 s2 之后,s1 便已废弃,只有 s2 有效,所以也就只有 s2 在离开自己的作用域时会释放空间,就不会造成二次释放了。

标签:变量,--,s2,s1,move,let,Rust,String
来源: https://www.cnblogs.com/yuyoubei/p/15840414.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有