【发布时间】:2020-06-10 10:44:57
【问题描述】:
我试图了解以下之间的利弊:
- 使用 Arc 并克隆 Arc(我在各个地方/线程中使用了一些东西)
对
- 使用 Something.clone()(我的 Something 结构只有 1 个已可克隆的字段)
除了测量和比较性能结果(我认为这两者中的任何一个都不会比性能更差)之外,我试图了解在 rustaceans 心目中被认为“通常更好”或“更惯用”的东西。
如果我理解正确:
- Arc 和克隆:我在堆上有 1 个东西(与堆栈相比昂贵)+ 我正在克隆 Arc(与 Rc.clone 相比昂贵,但如果我需要跨线程使用则需要)所以我创建/删除 N Arc取决于我克隆/删除的次数
对比
- Something.clone:我在堆栈上创建/删除 N 个Something 实例,具体取决于我克隆/删除的次数
在这种情况下(“某些东西”的创建成本很低),包装在 Arc 中而不是克隆它有什么好处? 这两个选项中的任何一个更可取吗?
【问题讨论】:
-
克隆通常更简单。更简单通常更好。
-
如果结构很小并且你想要不可变引用克隆可能是有意义的。请记住,如果您的项目范围发生变化并且您需要将您的结构放入 RefCell 或其他东西中,那么重构这些克隆将比一直在 Arc / Rc 中花费更多的精力。
-
我投票决定以“需要详细信息”来结束这个问题,因为我不确定在没有具体用例的情况下可能有什么答案。所有关于软件架构的问题都归结为“你会用它做什么?”如果你试图抽象出所有相关的细节,你将不会得到好的答案。
标签: rust clone reference-counting