如果我有以下方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
因为堆中的资源会在borrow_func 中释放,有没有办法避免这种情况?
如果我尝试在borrow_func中使用借用,如下所示,我会得到一个
编译错误:
预期
Box<i32>
,
发现&_
fn borrow_func(&c: Box<i32>) {
}
Run Code Online (Sandbox Code Playgroud)
似乎编译器没有b的指针类型?
我怎样才能使这项工作?
您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);
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用 &Box 的简单引用。有关借阅的更多信息,请查看:https : //doc.rust-lang.org/book/references-and-borrowing.html
弗拉基米尔补充了一条有用的信息:
指向像 &Box 这样的盒子的指针是单一的并且完全没有意义——它们引入了不必要的双重间接并且没有任何有用的回报。只是简单的参考(&i32)总是要走的路。