Rust 当整个盒子被移动时,盒子可以移动它的内容吗?

Rust 当整个盒子被移动时,盒子可以移动它的内容吗?,rust,heap-memory,move-semantics,borrowing,Rust,Heap Memory,Move Semantics,Borrowing,如果我Box::new一个值,取一个指向该值的指针(由于我将要移动该框,借阅检查器将不允许获取引用),然后移动Box,是否可以移动该值(例如重新分配) 我认为Box只存储地址值,因此移动Box只会移动地址。因此,当其内容被永久借用时,“借用检查器”是否会禁止移动它 否,移动框将不会移动堆中的值 框保证: 框保证表示为单个指针 Rust保证移动总是按位复制(如果它们完全复制的话) 因此,当其内容被永久借用时,“借用检查器”是否会禁止移动它 这包括: 移动箱子时,内容不会移动,但如果借阅检查器

如果我
Box::new
一个值,取一个指向该值的指针(由于我将要移动该框,借阅检查器将不允许获取引用),然后移动
Box
,是否可以移动该值(例如重新分配)

我认为
Box
只存储地址值,因此移动
Box
只会移动地址。因此,当其内容被永久借用时,“借用检查器”是否会禁止移动它


否,移动
框将不会移动堆中的值

保证:

保证表示为单个指针

Rust保证移动总是按位复制(如果它们完全复制的话)

因此,当其内容被永久借用时,“借用检查器”是否会禁止移动它

这包括:


移动箱子时,内容不会移动,但如果借阅检查器允许跨箱子移动引用箱子内容,则无法静态保证引用的有效性。@SvenMarnach是的,但移动箱子时为什么会抱怨?检查器不能区分方框和其中的数据吗?它们位于指针后面?指针地址可以有效地复制。编辑:我误解了你评论的结尾。现在我的理解是,问题可能是它不知道什么时候会删除数据。这会阻止is预测您对内容的引用的生存期。它能保证的是只要框没有移动,引用就有效。借用检查器在本地处理单个函数。如果将该框移出当前函数,则“借用检查器”将无法再推断内容的生存期。虽然有可能使借阅检查程序比目前更通用,但它所能证明的东西在理论上是有限的。