官网References and Borrowing部分,阅读后有一点疑问。 代码如下
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()
}
fn calculate_length(s: &String) -> usize { // s is a reference to a String
s.len()
} // Here, s goes out of scope. But because it does not have ownership of what
// it refers to, nothing happens.
疑问如下:
如图所示,s指向s1,s1中ptr指向堆中的数据。
我的疑问是,s是有内容的,即ptr,进入函数后,该数据是不是应该压入栈中?
被压入栈中,那么在calculate_length执行完成后虽然不回去释放s1,但是不应该将s的内存分配释放么?
如果官网说的没有问题,那么图中的s的数据否产生?是否被压入栈?是否会被释放?
请大佬答疑解惑,谢谢。
Ext Link: https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#references-and-borrowing
1
共 1 条评论, 1 页
评论区
写评论已经解决在https://users.rust-lang.org/t/references-and-borrowing/50349/12