被"移入"的内存会发生什么变化?

  • 本文关键字:变化 移入 内存 rust move
  • 更新时间 :
  • 英文 :


使用move重新分配值后,内存是否会生锈?

这个例子中的字符串"aaa"发生了什么?

let mut s = String::from("aaa");
s = String::from("bbb");

我猜"aaa"字符串被丢弃了——这是有道理的,因为它不再被使用了。然而,我在文档中找不到任何可以证实这一点的东西。(例如,本书只解释了当我们使用move分配新值时会发生什么(。

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

是的,对变量的赋值将删除要替换的值。

不删除替换后的值将是一场灾难——因为Drop经常用于解除分配和其他清理,如果不删除该值,最终会出现各种泄漏。

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

根据析构函数文档(增加重点(:

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

最新更新