如果我有以下方法:
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 的指针类型?
我该如何做到这一点?
答案 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)就可以了。