我有一种叫比萨的结构。它包含一个单一的基结构和一个Topping结构的向量。
我有一个返回必胜客的助手方法。在不久的将来,我看到顶部是一个集合,_Pizza_s是从这个_Topping_s集合(混合和匹配样式)动态创建的。
我的问题是,结构应该如何引用基础和顶部。如果我把所有权交给了struct,那么处理它就很容易了(没有生存期声明,助手方法也更容易,因为它们不再需要在作用域之外创建内存)。但是,通过使_Topping_s超出我的助手方法的作用域并声明生命周期,我的内存中的重复次数减少了。
人们是如何思考这些问题的?有什么推荐的经验法则吗?两者都有可能吗?
发布于 2019-11-01 03:06:49
如果Topping很小(例如,一个enum),那么您可以只复制它(例如,到Vec<Topping>中)。
如果Topping很大,并且只想在内存中复制一个副本,那么最容易使用的方法是使用Arc<Topping>,它是一个共享指针,可以廉价地复制,并且可以很容易地传递(例如,到Vec<Arc<Topping>>中)。
如果Pizza和Topping只在一个特定的静态已知范围内使用(例如,您在main()中创建所有的说明,以后不更改它们,或者使用内存池),那么您可以在Pizza<'a>中使用&'a Topping,但与Rc/Arc相比,这可能是微不足道的性能改进,并且跟踪临时生命周期将很烦人。
https://stackoverflow.com/questions/58577957
复制相似问题