小编Bog*_*Pop的帖子

一旦其所有者超出范围,谁是串联字符串的所有者?

我正在学习 Rust,Rust 编程语言书的第 8.2 章提出了一些疑问:

let mut s1 = String::from("foo");
let s2 = "bar";
s1.push_str(s2);
println!("s2 is {}", s2);
Run Code Online (Sandbox Code Playgroud)

如果该push_str方法获得了 的所有权s2,我们将无法在最后一行打印其值。

我理解这一点以及连接仅添加对字符串的引用而没有获得其所有权的事实。这应该意味着如果s2超出范围或被更改,连接的字符串应该被释放或更改,但它不会发生:

let mut s1 = String::from("foo");
{
    let mut s2 = String::from("bar");
    s1.push_str(&s2[..]);
    println!("s2 is {}", s2);

    println!("s1 is {}", s1);
    s2 = String::from("lol");

    println!("s2 is {}", s2);
}
println!("Value after change is {}", s1);
Run Code Online (Sandbox Code Playgroud)

由于连接后的字符串只是对字符串的引用s2s1并没有获得字符串的所有权,一旦s2超出范围,连接后的字符串的所有者是谁?

string ownership rust

5
推荐指数
1
解决办法
132
查看次数

标签 统计

ownership ×1

rust ×1

string ×1