如何在不复制的情况下将借用结构的装箱成员传递给函数?
How can I pass a boxed member of a borrowed struct to a function without copying it?
在我的示例中出现错误:
cannot move out of borrowed content
struct BigData {}
struct Data {
x: Box<BigData>,
}
fn calc_data(x: Box<BigData>) {}
fn main() {
let b = BigData {};
let d = Data { x: Box::new(b) };
let borrowed_d = &d;
calc_data(borrowed_d.x); //error: cannot move out of borrowed content
}
你的 calc_data
消耗了它的参数;但是,当 d
被借用时,您不能使用 x
。如果您不想更改 calc_data
的签名,则需要删除借用。
fn main() {
let b = BigData {};
let d = Data { x: Box::new(b) };
calc_data(d.x);
}
由于您正在使用参数,因此不会复制装箱数据。
你可以直接借用盒装成员并通过引用:
struct BigData {}
struct Data {
x: Box<BigData>,
}
fn calc_data(x: &Box<BigData>) {}
fn main() {
let b = BigData {};
let d = Data { x: Box::new(b) };
let borrowed_d = &d;
calc_data(&borrowed_d.x);
}
但是您实际上不太可能想要传递对框的引用而不是 BigData
本身,因此您可以这样做:
fn calc_data(x: &BigData) {}
并以同样的方式调用它(&Box<T>
自动转换为&T
)。
在我的示例中出现错误:
cannot move out of borrowed content
struct BigData {}
struct Data {
x: Box<BigData>,
}
fn calc_data(x: Box<BigData>) {}
fn main() {
let b = BigData {};
let d = Data { x: Box::new(b) };
let borrowed_d = &d;
calc_data(borrowed_d.x); //error: cannot move out of borrowed content
}
你的 calc_data
消耗了它的参数;但是,当 d
被借用时,您不能使用 x
。如果您不想更改 calc_data
的签名,则需要删除借用。
fn main() {
let b = BigData {};
let d = Data { x: Box::new(b) };
calc_data(d.x);
}
由于您正在使用参数,因此不会复制装箱数据。
你可以直接借用盒装成员并通过引用:
struct BigData {}
struct Data {
x: Box<BigData>,
}
fn calc_data(x: &Box<BigData>) {}
fn main() {
let b = BigData {};
let d = Data { x: Box::new(b) };
let borrowed_d = &d;
calc_data(&borrowed_d.x);
}
但是您实际上不太可能想要传递对框的引用而不是 BigData
本身,因此您可以这样做:
fn calc_data(x: &BigData) {}
并以同样的方式调用它(&Box<T>
自动转换为&T
)。