例子如下,求大佬告诉下,这个创建出来的String的实例的所有权归谁所有的
{
let a = &String::from("a");
let b = a;
}
我又修改了一下,问题焦点主要集中在所有权归属上
1
共 6 条评论, 1 页
例子如下,求大佬告诉下,这个创建出来的String的实例的所有权归谁所有的
{
let a = &String::from("a");
let b = a;
}
我又修改了一下,问题焦点主要集中在所有权归属上
评论区
写评论谢谢几位的回复,就不一一回复了,原来rust还有匿名变量引用这么一种现象啊
&String::from("a");
实质上隐式创建了作用域内的临时变量,临时变量拥有String::from("a")
,所有的引用也只在该作用域内有效,作用域结束时,临时变量被释放。这其实非常直观,而且无处不在,考虑以下代码:
其 MIR:
可以看到,方法返回的值也是被赋给隐式创建的临时变量。
godbolt
你的代码相当于
换成你写的代码,tmp 就是一个匿名临时栈上变量,拥有 String 的所有权,它因为临时变量生存期延长而活的比 a, b 都长。
會的。
可以理解爲String的所有權屬於一箇匿名變量,出作用域後就會drop。
主要想知道所有权是谁拥有的,按教程上说的String应该是分配在堆上的,超出作用域应该会回收,这个好理解,但&String::new()创建出来的,变量接收的是一个引用,不知道所有权给了谁
--
👇
BalterNotz: 应该会的,不确定。
应该会的,不确定。