如何将Box值传递给函数

时间:2016-01-10 16:39:10

标签: rust

如果我有以下方法:

fn borrow_func(c: Box<i32>) {
    // some code
}

fn main(){
    let a = Box::new(5i32);
    let b = a;

    borrow_func(b);
    println!("b contains: {}", b);
}

因为堆中的资源将在 borrow_func 中释放,有没有办法避免这种情况?

如果我尝试在 borrow_func 中使用借用,如下所示,我会得到一个

编译错误:

  

预期Box<i32>
  找到&_

fn borrow_func(&c: Box<i32>) {
}

似乎编译器没有 b 的指针类型?

我该如何做到这一点?

1 个答案:

答案 0 :(得分:4)

您的borrow_func实际上取得了盒装变量的所有权。您应该更改borrow_func的签名以反映借用,如下所示:

fn borrow_func(c: &i32) {
    // some code
}

fn borrow_func2(c: &Box<i32>) {
    // some code
}

fn main(){
    let a = Box::new(5i32);
    let b = a;

    borrow_func(&b);
    borrow_func2(&b);
    println!("b contains: {}", b);
}

您也可以使用&amp; Box的简单参考。有关借阅的更多信息,请查看:https://doc.rust-lang.org/book/references-and-borrowing.html

Vladimir添加了有用的信息:

  像&amp; Box这样的盒子的指针是单一的,完全没有意义 - 它们会引入不必要的双重间接,并且没有任何有用的回馈。只需简单的参考(&amp; i32)就可以了。