Rust基础-代码说明关于所有权概念

直接上代码,有点基础的都能看懂。

fn main() {
    let stack_para = 1;
    let heap_para1: String = String::from("heap_para1");

    take_owner(stack_para.to_string());
    take_owner(stack_para.to_string()); //因为stack_para在stack上,所以函数参数采用值拷贝,不存在所有权问题
    take_owner(heap_para1); //因为heap_para在heap上,所以heap_para的所有权转交函数参数,故不能再次使用
                            //take_owner(heap_para);           //再次调用会出错

    let mut heap_para2: String = String::from("heap_para2");
    change_ref(&mut heap_para2); //对于在heap上的变量采用reference的方式,参数引用是不持有所有权的。
    change_ref(&mut heap_para2); //再次调用没有问题
                                 //
    let mut stack_para1 = 1;
    for i in 1..10 {
        let sub = stack_para1;
        stack_para1 += sub; //此处sub虽然是临时stack变量,但因为是值操作,stack_para1的值已计算完成,不存在所有权问题。
    }
    println!("statck_para1={}", stack_para1);

    let heap_para3 = String::from("heap_para3"); //大括号内sub获取的是reference,所以没有获得所有权
    {
        let sub = &heap_para3;
        println!("sub value={}", sub);
    }
    println!("statck_para3={}", heap_para3); //此处打印正常

    {
        //大括号内sub获得所有权
        let sub = heap_para3;
        println!("sub value={}", sub);
    }
    //println!("statck_para3={}",heap_para3);//此处已报错,borrow of moved value
}

fn take_owner(str: String) {
    println!("{}", str);
}
fn change_ref(str: &mut String) {
    str.push_str(" add by ref");
    println!("{}", str);
}

下面是输出

1
1
heap_para1
heap_para2 add by ref
heap_para2 add by ref add by ref
statck_para1=512
sub value=heap_para3
statck_para3=heap_para3
sub value=heap_para3

好了就是这样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值