在结构中引用内存的正确方法是什么

时间:2019-10-27 09:08:19

标签: rust

我有一个名为 Pizza 的结构。它包含一个 Base 结构和一个 Topping 结构的向量。

我有一个返回 Pizza 的助手方法。在不久的将来,我会看到浇头是某个地方的集合,而 Pizza 是从 Topping 的这一系列(混合和匹配样式)动态创建的。

我的问题是该结构应如何引用基础和浇头。如果将所有权授予该结构,那么它就很容易处理(没有生命周期声明,辅助方法也更容易,因为它们不再需要在范围之外创建内存)。但是,通过使 Topping 超出我的辅助方法的范围并声明生存期,我在内存中的重复次数会减少。

人们如何看待这些问题?是否有建议遵循的经验法则?可能两者都有吗?

1 个答案:

答案 0 :(得分:1)

如果Topping小(例如enum),则可以将其复制(例如复制到Vec<Topping>)。

如果Topping很大,并且您只想在内存中复制一个副本,那么最容易使用的方法是使用Arc<Topping>,它是一个共享指针,可以廉价地克隆并轻松传递(例如进入Vec<Arc<Topping>>)。

如果PizzaTopping仅在特定的静态已知范围内使用(例如,您在main()中创建所有浇头,以后不要更改它们,或者使用内存池),您可能无法在&'a Topping中使用Pizza<'a>,但是与Rc / Arc相比,这可能是微不足道的性能改进,并且要跟踪暂时的寿命会很烦人。

相关问题