s
中的变量print_struct
是否引用堆或堆栈上的数据?
struct Structure {
x: f64,
y: u32,
/* Use a box, so that Structure isn't copy */
z: Box<char>,
}
fn main() {
let my_struct_boxed = Box::new(Structure {
x: 2.0,
y: 325,
z: Box::new('b'),
});
let my_struct_unboxed = *my_struct_boxed;
print_struct(my_struct_unboxed);
}
fn print_struct(s: Structure) {
println!("{} {} {}", s.x, s.y, s.z);
}
据我所知,let my_struct_unboxed = *my_struct_boxed;
将所有权从包装箱转移到my_struct_unboxed
,然后在功能s
中转移到print_struct
。
实际数据会怎样?最初,它是通过调用Box::new(...)
从堆栈复制到堆的,但是数据在某些时候是moved还是复制回堆栈的?如果是这样,怎么办?何时调用drop
? s
超出范围时?
Structure
中的my_struct_boxed
数据存在于堆中,而Structure
中的my_struct_unboxed
数据存在于堆栈中。
如果是,如何?