Rust测试字符串的移动,Move

2023-12-13 05:33:52

代码创建了一个结构体,结构体有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());
}

运行结果:

文章来源:https://blog.csdn.net/qq_46506007/article/details/134885895
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。