首页 > 解决方案 > 调用函数返回但未分配的值的所有权会怎样?

问题描述

考虑以下 Rust 代码,根据 The Book中的示例稍作修改。

我试图了解在函数中第二次运行函数时值会发生什么dangle()main()见评论)。我可以想象,因为该值没有分配给任何所有者,所以它被解除分配,但到目前为止我还没有找到信息来确认这一点。否则,我会认为dangle()重复调用会不断分配更多内存而不释放它。它是哪一个?

fn main() {
    // Ownership of dangle()'s return value is passed to the variable `thingamabob`.
    let thingamabob = dangle();

    // No ownership specified. Is the return value deallocated here?
    dangle();

    println!("Ref: {}", thingamabob);
}

fn dangle() -> String {
    // Ownership specified.
    let s = String::from("hello");

    // Ownership is passed to calling function.
    s
}

标签: rust

解决方案


当一个值没有所有者(未绑定到变量)时,它就会超出范围。超出范围的值将被删除。删除一个值会释放与该值关联的资源。

任何更少都会导致内存泄漏,这在编程语言中将是一个糟糕的主意。

也可以看看:


推荐阅读