浅谈rust借用与引用

浅谈rust借用与引用

先来看看rust入门上说的借用与引用:
我们将获取引用作为函数参数称为 借用(borrowing)
正如现实生活中,如果一个人拥有某
样东西,你可以从他那里借来。当你使用完毕,必须还回去。
原文链接:https://blog.csdn.net/weixin_44259356/article/details/103975850

例子

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的String,注意不是str,String是可变字符串,由栈里的s1保存指向堆空间的地址,长度以及容量。如上图。

然后调用函数calculate_length,里面传入了一个s1的引用。这里s里存的是s1的引用,也就是说s是一个与s1不同的全新的变量,只是里面存的指针值指向了s1,同时没有长度和容量。这里可以理解为java的引用。

这样做法有一个好处,函数并没有直接获得s1的所有权,当函数结束,即引用离开其作用域s被释放但是s1任然存在并不会被丢弃。所以函数结束后你任然可以继续使用s1.

注意:rust里默认拷贝全是浅拷贝,只会拷贝栈上的引用值,并不会拷贝堆空间的值。

深拷贝可以如下使用:

let s1 = String::from("hello");
let s2 = s1.clone();

最后总结

rust借用可以理解为动作,行为,类比a从b那里借东西。
rust引用类似于java的引用,字面上的:&s1。所以我们称
我们将获取引用作为函数参数称为 借用(borrowing)

发布了46 篇原创文章 · 获赞 6 · 访问量 9386

猜你喜欢

转载自blog.csdn.net/weixin_44259356/article/details/103975850