何时使用Box而不是引用?

时间:2016-03-20 17:31:08

标签: pointers rust

我是Rust的新手,我正在尝试了解应该使用Box而不是常规参考。

我可以找到的所有示例都显示了如何使用Box,但没有一个示例说明您应该在常规&引用中使用它们的情况。

2 个答案:

答案 0 :(得分:6)

除了Shepmaster之外的其他答案:另一种想法所有权的方法

您始终需要考虑:生活的价值在哪里?

例如,数据可以存在于堆栈,可执行文件的某个特殊位置或Box中。另一方面,参考不是​​生活的地方 - 它只是指向某些生活 其他地方的数据。所以:

  • 如果你知道你想要使用的数据有一个住所:你通常可以只使用一个引用(地址)来访问它(访问它✈)。
  • 如果您的数据没有居住的地方,请将其放在一个盒子里给它一个家♥

Rust书中的章节ownershipborrowing是了解这些概念的好方法。

答案 1 :(得分:4)

Box表示某种类型拥有,并且在堆上分配。引用(&)表示您从其他地方借用该值。

您甚至可以从Box获取引用(此处不需要显式类型,仅为了清晰起见而显示):

let boxed: Box<i32> = Box::new(42);
let reference: &i32 = &boxed;

主要区别归结为所有权。当你拥有一个值时,你可以做更多的事情,比如摧毁它或控制它的可变性。

堆与堆栈也很重要,但不那么紧迫。堆栈往往具有相对较小的固定大小(在我的机器上它是8MiB),因此在堆栈上声明大变量会导致内存耗尽。堆往往更大,从概念上解决2 ^ 32或2 ^ 48字节。

The Rust Programming Languagesection on ownership以及the stack and the heap部分;我鼓励你们同时阅读。