Rust测试字符串的移动,Move

Rust测试字符串的移动,Move_第1张图片

代码创建了一个结构体,结构体有test1 字符串,还有指向字符串的指针。一共创建了两个。

然后我们使用swap 函数 交换两个结构体内存的内容。

最后如上图。相同的地址,变成了另外结构体的内容。注意看指针部分,还是指向原来的地址。然后我们修改test1 ,test2输出的时候就变了

struct Test {
    a: String,
    b: *const String,
}

impl Test {
    fn new(txt: &str) -> Self {
        Test {
            a: String::from(txt),
            b: std::ptr::null(),
        }
    }
    fn init(&mut self) {
        let self_ref: *const String = &self.a;
        self.b = self_ref;
    }
    fn b(&self) -> &String {
        unsafe {
            &*(self.b)
        }
    }
}


fn main() {
    let mut test1 = Test::new("test1");
    test1.init();

    let mut test2 = Test::new("test2");
    test2.init();

    println!("a:{},b:{}", test1.a, test1.b());

    std::mem::swap(&mut test1, &mut test2);

    test1.a = "xxxxx".to_string();
    println!("a:{},b:{}", test2.a, test2.b());
}

运行结果:

Rust测试字符串的移动,Move_第2张图片

你可能感兴趣的:(rust,开发语言,后端)