【rust中使用 & 与 Box 的区别】

文章讨论了Rust编程语言中&引用和Box在处理变量所有权上的差异。通过示例代码展示,&创建的是借用关系,允许不转移所有权的访问,而Box则获取变量的所有权,实现了值的移动。在枚举类型Node的实现中,这一区别导致不同的行为和生命周期管理。
摘要由CSDN通过智能技术生成

提示:记录一下学习rust的一点理解,如有错误请指出,谢谢!

rust 中使用 & 与 Box 的区别


rust 中使用 & 与 Box 的区别

Box 可以获取变量的所有权,而 & 获取的是变量的引用

  • &:发生的是借用
    借用
#[derive(Debug)]
enum Node<'a> {
    Cons(i32, &'a Node<'a>),
    Nil,
}
use Node::{Cons, Nil};
fn main() {
    let node1 = Cons(11, &Nil);
    let node2 = Cons(22, &node1);
    let node3 = Cons(33, &node2);
    let a = Cons(12, &node3);

    println!("{:?}", a); // Cons(12, Cons(33, Cons(22, Cons(11, Nil))))
    println!("{:?}", node1); // Cons(11, Nil)
    println!("{:?}", node2); // Cons(22, Cons(11, Nil))
    println!("{:?}", node3); // Cons(33, Cons(22, Cons(11, Nil)))
}
  • Box: 发生的是移动
    移动
#[derive(Debug)]
enum Node{
  Cons(i32, Box<Node>),
  Nil
}
use Node::{Cons, Nil};
fn main() {
  let node1 = Cons(11, Box::new(Nil));
  let node2 = Cons(22, Box::new(node1));
  let node3 = Cons(33, Box::new(node2));
  let a = Cons(12, Box::new(node3));

  println!("{:?}", a);
  println!("{:?}", node1);
  println!("{:?}", node2);
  println!("{:?}", node3);
}
// 26 |   let node1 = Cons(11, Box::new(Nil));
//    |       ----- move occurs because `node1` has type `Node`, which does not implement the //`Copy` trait
// 27 |   let node2 = Cons(22, Box::new(node1));
//    |                                 ----- value moved here
//...
// 32 |   println!("{:?}", node1);
//    |                    ^^^^^ value borrowed here after move

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值