代碼創建了一個結構體,結構體有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());
}
運行結果: