Pointers 何时使用框而不是引用?

Pointers 何时使用框而不是引用?,pointers,rust,Pointers,Rust,我是个新手,我正在努力理解什么时候应该使用框来代替常规参考 我能找到的所有示例都显示了如何使用框,但没有一个解释在什么情况下应该在常规和引用中使用它们。一个框表示一个类型是拥有的,并且它是在堆上分配的。引用(&)表示您正在借用其他东西的值 您甚至可以从框中获取引用(此处不需要显式类型,仅为清晰起见而显示): let boxed:Box=Box::new(42); let引用:&i32=&box; 主要区别在于所有权。当你拥有一个值时,你可以对它做更多的事情,比如销毁它或者控制它的易变性 堆与堆

我是个新手,我正在努力理解什么时候应该使用
框来代替常规参考


我能找到的所有示例都显示了如何使用
,但没有一个解释在什么情况下应该在常规
引用中使用它们。

一个
表示一个类型是拥有的,并且它是在堆上分配的。引用(
&
)表示您正在借用其他东西的值

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

let boxed:Box=Box::new(42);
let引用:&i32=&box;
主要区别在于所有权。当你拥有一个值时,你可以对它做更多的事情,比如销毁它或者控制它的易变性

堆与堆栈也很重要,但不那么直接。堆栈往往有一个相对较小的固定大小(在我的机器上是8MiB),因此在堆栈上声明大变量可能会耗尽内存。堆往往更大,概念上寻址2^32或2^48字节

有一个以及一节关于;我鼓励你读这两本书。

(除了Shepmaster的伟大回答:另一种思考所有权的方式)

您必须始终思考:价值在哪里?
let boxed: Box<i32> = Box::new(42);
let reference: &i32 = &boxed;