Function understand_move

Source
pub fn understand_move()
Expand description

示例1: Box 实现 DereMove

fn main(){
    let s = Box::new("hello".to_string());
    println!("{:p}", &s);
    println!("{:p}", s.as_ptr());
    // DerefMove
    let s2 = *s;
    // println!("{:p}", s.as_ptr()); // Moved s
    println!("{:p}", s2.as_ptr());
}

示例二:Arc 无法 DerefMove

https://doc.rust-lang.org/std/sync/struct.Arc.html

use std::sync::Arc;

fn main(){
    let s = Arc::new("hello".to_string());
    println!("{:p}", &s);
    println!("{:p}", s.as_ptr());
    // DerefMove Error : cannot move out of an `Arc`
    let s2 = *s;
    // println!("{:p}", s.as_ptr()); // Moved s
    println!("{:p}", s2.as_ptr());
}