本文介绍了Rust中判断变量所有权是否转移的“灵魂三问”法则,以及自动解引用的适用场景。
**所有权判断**:对于复杂类型(如String),若发生“裸体赋值”(`=` 直接赋值)、作为参数传递给函数(未加`&`)、或调用消耗自身的方法(如`into_...()`),则所有权转移,原变量失效。简单类型(如i32)则始终存活。此外,变量在离开其作用域`{}`时也会被销毁。
**自动解引用**:主要发生在两个场景:1)使用点操作符`.`调用方法或访问字段时,编译器会自动尝试解引用或加引用直到找到对应成员;2)函数传参时,若类型实现了`Deref`,`&T`会自动转换为`&U`(如`&String`转`&str`)。但在赋值、算术运算和模式匹配中,不会自动解引用,需手动处理。
简言之,所有权转移遵循明确规则,而自动解引用旨在方便方法调用和传参,但在可能影响逻辑正确性的操作中保持严格。