struct SelfRef { x: u32, // ptrは常にxを指していて欲しいが、SelfRefがムーブした瞬間に別のアドレスを指すようになる ptr: *const u32, } impl SelfRef { pub fn new(x: u32) -> SelfRef { let mut this = SelfRef { x, ptr: std::ptr::null(), }; this.ptr = &this.x; // まだアドレスは変わらないのでテストは成功する assert_eq!(&this.x as *const _, this.ptr); // ここで値を返した瞬間にxのアドレスが変わり、ptrの値が不正となる this } } fn main() { let v = SelfRef::new(0); // v.xとv.ptrの値が異なるためテスト失敗 asser