被“移入”的记忆会发生什么?

aur*_*lia 2 move rust

moverust 在使用重新分配值后会删除内存吗?

此示例中的字符串会发生什么情况"aaa"

let mut s = String::from("aaa");
s = String::from("bbb");
Run Code Online (Sandbox Code Playgroud)

我猜"aaa"字符串被删除了 - 这是有道理的,因为它不再被使用。但是,我在文档中找不到任何证实这一点的内容。(例如,本书仅解释了当我们使用 分配新值时会发生什么move)。

我试图理解 Rust 用于确保内存安全的规则,但我找不到在这种情况下会发生什么的明确规则。

Sha*_*ger 5

移动语义在这里是隐含的。中的数据s是通过从String生成的移动来初始化的String::from("bbb")。存储的原始数据s因副作用而被删除(替换它的过程使其失去所有者,因此它作为操作的一部分被删除)。

根据析构函数文档(添加了重点):

当已初始化的变量或临时变量超出范围时,其析构函数将运行或被删除。如果已初始化,赋值还会运行其左侧操作数的析构函数。如果变量已部分初始化,则仅删除其已初始化的字段。