【发布时间】:2022-01-23 06:58:52
【问题描述】:
我很好奇这个问题的答案,因为我主要使用容器。 在矢量或地图容器中的最少 100 个(最多 10k)个元素中使用哪一个更合乎逻辑?
std:::vector<std::unique_ptr<(struct or class name)>>std:::vector<std::shared_ptr<(struct or class name)>>std:::vector<(struct or class name)*>
机器细节:FreeBSD 12.1 + clang-devel 或 gcc11。
【问题讨论】:
-
默认选择第四个选项:
std:::vector<(struct or class name)> -
@davidhigh 为什么?每当我查看大型项目(如游戏)开发人员通常使用
std::vector<(struct or class name)*>时,我都不完全理解这一点,这是什么原因? -
这取决于
class或struct是什么以及您如何使用它以及如何使用向量。 -
在上面展开:除非你有一个非常好的理由,比如多态性,否则让容器包含数据。更少的指针意味着更少的指针追逐和更好的缓存使用。
-
不完全。我们要去的地方是你应该有充分的理由。有很多好的理由,不胜枚举,而多态性只是一个很常见的理由。在 cmets 的大小、稀缺性和数据隐藏等方面提出了很好的理由。你会发现更多。但如果你没有充分的理由,让容器完成它的工作并包含它。如果没有明显的原因,测试和分析会告诉您是否需要替代方案。