我什么时候应该使用引用而不是转移所有权?

2024-01-10

From Rust 书中关于所有权的章节 https://doc.rust-lang.org/book/second-edition/ch04-00-understanding-ownership.html,可以通过转移所有权或使用可变或不可变引用将不可复制的值传递给函数。当您转移某个值的所有权时,它就不能再在原始函数中使用:如果您愿意,您必须将其返回。当您传递引用时,您借用了该值并且仍然可以使用它。

我来自默认情况下值不可变的语言(Haskell、Idris 等)。因此,我可能根本不会考虑使用参考文献。对我来说,在两个地方具有相同的值看起来很危险(或者至少很尴尬)。既然引用是一项功能,那么使用它们就必须有一个理由。

在某些情况下我应该强迫自己使用参考文献吗?这些情况是什么?为什么它们是有益的?或者他们只是为了方便而默认传递所有权就可以了?


可变引用看起来尤其危险。

它们并不危险,因为 Rust 编译器不会让你做任何危险的事情。如果你有一个&mut引用一个值,那么你不能同时拥有any其他对其的引用。

In general你应该传递参考资料。这可以节省复制内存,并且应该是您所做的默认操作,除非您有充分的理由不这样做。

转移所有权的一些充分理由:

  1. 当值的类型尺寸较小时,例如bool, u32等等。移动/复制这些值以避免一定程度的间接性通常可以获得更好的性能。通常这些值实现Copy,实际上编译器可能会自动为您进行此优化。由于强大的类型系统和默认的不变性,它可以免费做一些事情!
  2. 当该值的当前所有者将超出范围时,您可能希望将该值移动到其他位置以使其保持活动状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我什么时候应该使用引用而不是转移所有权? 的相关文章

随机推荐