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;