首页 文章

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

提问于
浏览
3

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

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

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

1 回答

  • 10

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

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

    一般来说,你应该传递参考 . 这节省了复制内存,应该是你做的默认操作,除非你有充分的理由不这样做 .

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

    • 当值的类型很小时,例如 boolu32 等 . 移动/复制这些值以避免间接级别通常会有更好的性能 . 通常这些值实现 Copy ,实际上编译器可以自动为您进行优化 . 由于强大的类型系统和默认的不变性,它可以自由地做!

    • 当值的当前所有者超出范围时,您可能希望将值移动到其他位置以使其保持活动状态 .

相关问题