我应该何时使用参考而不是转让所有权?

时间:2018-04-25 17:09:49

标签: reference rust move-semantics borrowing

the Rust book's chapter on ownership开始,可以通过转移所有权或使用可变或不可变引用将不可复制的值传递给函数。当您转移值的所有权时,它不能再用于原始函数:如果您愿意,您必须将其返回。传递引用时,您可以借用该值并仍然可以使用它。

我来自默认值不可变的语言(Haskell,Idris等)。因此,我可能永远不会考虑使用引用。在两个地方拥有相同的价值对我来说是危险的(或者至少是尴尬的)。由于引用是一个特性,因此必须有理由使用它们。

是否有情况我应该强迫自己使用引用?这些情况是什么?为什么它们有益?或者他们只是为了方便和默认通过所有权是好的?

1 个答案:

答案 0 :(得分:10)

  

特别是可变引用看起来非常危险。

它们并不危险,因为Rust编译器不会让你做任何危险的事情。如果您对某个值有&mut引用,则您无法同时对其进行任何其他引用。

general 中,你应该传递引用。这样可以节省复制内存,应该是您默认的操作,除非您有充分的理由不这样做。

转移所有权的一些好理由:

  1. 当值类型的大小较小时,例如boolu32等。移动/复制这些值以避免级别通常会有更好的性能间接的。通常这些值实现Copy,实际上编译器可以自动为您进行优化。由于强大的类型系统和默认的不变性,它可以自由地做一些事情!
  2. 当值的当前所有者超出范围时,您可能希望将值移到其他位置以使其保持活动状态。