Rust 在持有该值所有权的变量被重新分配后,堆分配的值会发生什么变化?

Rust 在持有该值所有权的变量被重新分配后,堆分配的值会发生什么变化?,rust,Rust,我目前正在学习Rust编程语言,在阅读了所有权和生命周期概念(我发现这是GC的一个优雅替代方案)之后,我找不到以下问题的答案。 就所有权和生命周期而言,下面的代码按照注释所述的方式工作 fn main() { let mut x: u32 = 10; // x is pointing to memory in stack println!("before reassignment: x = {}", x); // prints 10 x = 11; // memory i

我目前正在学习Rust编程语言,在阅读了所有权和生命周期概念(我发现这是GC的一个优雅替代方案)之后,我找不到以下问题的答案。 就所有权和生命周期而言,下面的代码按照注释所述的方式工作

fn main() {
    let mut x: u32 = 10; // x is pointing to memory in stack
    println!("before reassignment: x = {}", x); // prints 10
    x = 11; // memory in stack simply has been updated with another value
    println!("after reassignment: x = {}", x); // prints 11
} // x is dropped here
每个人都很高兴,但是想象一下如果我们有这样的代码:

fn main() {
    let mut x = Box::new([99; 1000]); // x owns a Box, which owns heap allocated array 
    println!("before reassignment: x[0] = {}", x[0]); 
    x = Box::new([100; 1000]); // x has been assigned another Box
    // what happened to previous heap allocated array, has it been
    // dropped behind the scenes, or is that a memory leak?
    println!("after reassignment: x[0] = {}", x[0]);
} // x is dropped here, only the last assigned value gets dropped with it.
堆分配的数组(首先分配的数组)会发生什么情况,它会一直存在到函数结束,还是会在重新分配时删除? 我还在学习Rust,所以我对内存管理的理解可能还不完整


这个问题与中的问题稍有不同,因为它是关于所有者变量仍在作用域中,但只是被分配了另一个值的情况。

每当您为实现
Drop
类型的变量分配新值时,旧值将在分配新值之前被删除。对于拥有堆分配内存的类型,如
,这意味着将在分配时释放内存


虽然在安全防锈代码中可能会泄漏无法访问的内存,但这不太可能是偶然发生的。

谢谢您的回复,您能给我指一下官方文件吗?如果有,我可以在那里阅读更多关于这方面的信息。@Babur:看看防锈书的链接部分,您可能会感兴趣。