我是 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 实例的值被删除时?我对此有点困惑,如果我能得到一个简单有效的解释,我将不胜感激。