美文网首页
rust的所有权

rust的所有权

作者: 轻舞凋零 | 来源:发表于2022-07-10 10:11 被阅读0次
use std::rc::Rc;
use std::sync::Arc;

struct Person {
    name :String,
    age:i32,
}

#[derive(Copy,Clone, Debug)]
struct TestData {
    p1:i32
}

fn get_data(str1 :String) -> String{
    str1
}

fn main() {
    //所有权
    let str1 = "hello";
    {
        let str2 = "world";
        println!("{}",str2);
    }
    //println!("{}",str2)
    println!("{}",str1);

    //str的复制
    let a1 = "123";
    let b1 = a1;
    println!("a1={}", a1);
    //全新的实例
    println!("b1={}", b1.to_string());

    //转移的地方,1 函数返回 2 构建新值 3 给函数传值
    let vec2:Vec<i32> = (0..5).collect();
    println!("{:#?}", vec2);
    let vec3 = vec2;
    //error 构建新值
    //println!("{:#?}", vec2);
    println!("{:#?}", vec3);

    let str3 :String = String::from("tom");
    println!("str3={}", str3);
    let age_number:i32 = 31;
    let p1 = Person{name:str3, age:age_number};
    println!("p1.name={} p1.age={} ", p1.name, p1.age);
    //error   构建新值
    //println!("str3={}", str3);

    let str4 :String = String::from("tom");
    println!("str4={}", str4);
    let strt5 = get_data(str4);
    println!("strt5={}", strt5);
    //error 给函数传值
    //println!("str4={}", str4);

    let mut vec5 = Vec::new();
    for i in 101..106 {
        vec5.push(i)
    } 

    let one_str = vec5[0];
    println!("stone_strr4={}", one_str);
    println!("{}", vec5.pop().unwrap());
    println!("{}", vec5.swap_remove(1));
    let axxx = std::mem::replace(&mut vec5[1], 122222);
    println!("{:#?},{}", vec5, axxx);


    //有意思的是值的获取必须是变量的,不能转移
    let v3 = vec!{"a1".to_string(),"a2".to_string(),"a3".to_string()};
    for mut s in v3 {
        s.push('x');
        println!("{}", s);
    }


    //不同的类型转移,不同的类型赋值
    //大多数类型转义,以下类型或copy:整数,char,bool,元组,数组
    //任何值在被清除后需要特殊处理的类型都不能是copy类型
   let test_data1 = TestData{p1:123};
   let test_data2 = test_data1;
   println!("{:#?}", test_data1);
   println!("{:#?}", test_data2);
   println!("{:#?}", test_data2.p1);

   //rc
   let rc1:Rc<String> = Rc::new("aaaaa".to_string());
   let rc2:Rc<String> =  rc1.clone();
   let rc3:Rc<String> = rc1.clone();
   println!("{:#?}", rc1);
   println!("{:#?}", rc2);
   println!("{:#?}", rc3);

   //arc 多线程版本的引用计数
   let arc1:Arc<String> = Arc::new("aaaaa".to_string());
   let arc2:Arc<String> =  arc1.clone();
   let arc3:Arc<String> = arc1.clone();
   println!("{:#?}", arc1);
   println!("{:#?}", arc2);
   println!("{:#?}", arc3);
}

相关文章

  • Rust 所有权

    认识所有权 所有权是 rust独特的功能,它让 rust无需垃圾回收即可保证内存安全。 什么是所有权 Rust核心...

  • The Rust programming language 读书

    所有权概念是 Rust 语言的核心功能 Rust 没有垃圾回收(GC)机制 Rust 通过所有权和相关工具保障内存...

  • 2019-08-27

    Rust思考 所有权,Rust通过所有权机制移除了垃圾回收器,但是所有权机制绝非坦途,它对开发人员提出了更高的要求...

  • Rust 所有权

    引用[https://www.runoob.com/rust/rust-ownership.html] 所有权规则...

  • rust ownership

    所有权(系统)是 Rust 最为与众不同的特性,它让 Rust 无需垃圾回收(garbage collector)...

  • Rust中的作用域及作用域的规则

    [TOC] Rust中的作用域及作用域的规则 所有权是 Rust 最独特的特性,它使 Rust 能够在不需要 GC...

  • Rust入坑指南:智能指针

    在了解了Rust中的所有权、所有权借用、生命周期这些概念后,相信各位坑友对Rust已经有了比较深刻的认识了,今天又...

  • Rust 所有权

    什么是所有权?(Ownership) Rust 不使用 GC(垃圾回收器)管理内存,而是使用所有权机制进行管理。和...

  • rust 所有权

    不可变变量 可变变量 所有权三个规格 内存与分配 MOVE COPY 所有权和函数 引用与借用 可变引用的限制 引用悬挂

  • Rust-所有权系统

    今天学习Rust中的所有权系统。按照官方教程所述,所有权系统包含三个部分: 所有权 借用 生命周期 看完发现,C+...

网友评论

      本文标题:rust的所有权

      本文链接:https://www.haomeiwen.com/subject/kxjwbrtx.html