rust 所有权

所有权

栈和堆

  • 栈的存储方式比较简单。数据从栈顶进入,叫压栈,数据也从栈顶弹出,叫出栈。特点先进后出。

  • 堆的存储方式比较难,堆是一块比较大的内存,
    堆每生产一份数据时需要找到一块适应的内存才能存储,
    因此数据在堆中的位置时无序的,所以为了快速访问到改数据有了指针的概念,指针指向该数据最开头的位置。

  • 为了更好管理内存与指针的关系,rust 的指针与内存是一对一的。内存当没有内存指向就会回收(不管内存在堆或者栈),这是所有权的特点之一。

所有权所在的场景
  • 不会有所有权问题 (21 对象会保存在栈中)
    // todo 常量在栈的生命周期
fn main() {
    // 栈上分配内存,不会有所有权问题
    let mut user = 21;
    let user2 = user;
    println!("{}", user);
    println!("{}", user2);
}
  • 所有权问题 (String对象会保存在堆中)
fn main() {
    // 栈上分配内存,不会有所有权问题
    let mut user = String::from("21");
    let user2 = user;
    println!("{}", user);// 这部分会有所有权问题
    println!("{}", user2);
}
// 结构体
struct User {
    id: i32,
    username: String,
    password: String,
}

fn getUser(mut id: i32, username: String, password:String ) -> User {
    return User{
        id,
        username,
        password,
    };
}

fn main() {
    let mut id = 23;
	let mut user = getUser(id,String::from("admin"), String::from("admin"));
	user.password = String::from("123456");
	
	let user2 = user;
	// println!("{} {} {}", user.id, user.username, user.password); // user 引用的所有权已经给了user2,编译不通过
	println!("{} {} {}", user2.id, user2.username, user2.password);
}

总结

所有权就是为了管理堆内存的指针而诞生的;

  • 一个数据只有一个引用所有
  • 为了防止野指针,空指针等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道产品爱上我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值