需要更多解释 Rust 中所有权上下文中的 Scope 和 Drop 调用的行为

问题描述 投票:0回答:1

我是 Rust 的新手,对了解它的所有权概念没什么兴趣。根据官方文档,关于

referencing
的概念提到了以下内容:

以下是如何定义和使用calculate_length函数,该函数将对象引用作为参数,而不是获取值的所有权:

fn main() {
    let s1 = String::from("hello");

    let len = calculate_length(&s1);

    println!("The length of '{}' is {}.", s1, len);
}

fn calculate_length(s: &String) -> usize {
    s.len()
}

&s1 语法允许我们创建一个引用 s1 的值但不拥有它。因为它不拥有它,所以当引用停止使用时,它指向的值不会被删除。

因此在上述场景中,

s1
仍然可以访问,并且直到
main
函数结束才超出范围,并且仅在
drop
函数结束后调用
main
。但是如果像这样将值传递给
calculate_length
函数呢?

let len = calculate_length(&String::from("hello"));

什么时候叫空投?这个

owner
String
是谁?当引用的 String 实例的值被删除时?我对此有点困惑,如果我能得到一个简单有效的解释,我将不胜感激。

rust ownership
1个回答
0
投票

在其他编程语言中,例如 C,类似

&String::from("hello")
的内容将被禁止,因为不清楚值
String::from("hello")
是否有一个起始地址。

但是,在 Rust 中,临时对象被删除了在语句末尾它们是在其中创建的。因此,在您的情况下,它将在

len
被分配给之后。

© www.soinside.com 2019 - 2024. All rights reserved.