使用 box 关键字和 Box::new 有啥区别?
Posted
技术标签:
【中文标题】使用 box 关键字和 Box::new 有啥区别?【英文标题】:What is the difference between using the box keyword and Box::new?使用 box 关键字和 Box::new 有什么区别? 【发布时间】:2016-05-14 01:53:03 【问题描述】:box
只是语法糖还是可以应用于Box::new
不够用的用例?我在某处读到 box
不稳定,这是否意味着我只能在夜间 Rust 版本中使用它?
【问题讨论】:
【参考方案1】:Box::new
只是一个函数,就像任何其他函数一样。无论如何,它并不特别。它脏兮兮的,散发着微弱的快要保质期奶酪的味道。
box
是魔法,由小精灵和小孩子的梦想组成。它穿着最好、最时髦的衣服,身上带着淡淡的新鲜松树的香气。
当您执行Box::new(e)
时,因为它是一个函数,所以e
必须在在开始调用之前被完全评估和构造。如果这意味着在堆栈上分配和填充一个 500kB 的结构,那么它必须在堆栈上分配和填充一个 500kB 的结构,然后将其传递给Box::new
,然后 /em> 可以在堆上分配空间(这可能会失败),然后将 500kB 复制到堆中。
当您执行box e
时,因为它就像炎热夏日的凉风一样美妙,编译器可以通过在堆上分配 500kB 来重新排序以使其开始,然后直接在堆上填充 500kB 结构。然后就完成了。没有额外的复制,没有咀嚼堆栈空间。如果“在堆上分配”的事情失败了,也不会浪费精力。
box
是生活,box
是爱;万岁box
!
(是的,在撰写本文时,它仍然不稳定,这意味着您需要一个夜间编译器来沐浴在它的光芒中。但是很快,黎明就会到来。明白了吗?黎明?夜间?。 ..我会展示自己的...)
【讨论】:
难道box
关键字不应该涵盖自定义分配(即,分配的东西else 而不是Box
)?还是要换成展示位置<-
?
box
将通过推理支持Box
以外的事物(例如 Rc
、Arc
、等)。 <-
是 placement 的当前临时语法,它是相关的,但不同:box
创建一个新位置来放置一个值,然后将它放在那里,<-
将一个值放在一个现有的位置(例如,在向量的末尾)。
我很喜欢这个答案的每一部分——我也学到了一些东西。以上是关于使用 box 关键字和 Box::new 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
CSS3 display:flex和display:box有啥区别
CSS3 display:flex和display:box有啥区别