【发布时间】:2019-09-06 12:33:10
【问题描述】:
我们的代码库使用许多向量。其中一些向量彼此共享对象,即它们包含std::shared_ptr 到共享对象。问题是:代码库仍处于积极开发阶段,并且经常需要将一些包含值的向量重写为包含共享指针的向量。这很乏味。所以我想出了一个想法:简单地将所有向量作为共享指针的向量。
问题:可以吗?我应该注意哪些注意事项?会出什么问题?
我进行了一些简单且可能是幼稚的测量,在初始化和查询值向量和共享指针向量之间的性能方面几乎没有区别。
如果性能不是问题,我还有什么需要注意的吗?
【问题讨论】:
-
@Ron: 多态类型的向量,共享对象...
-
我提供了反例(这在我看来并不罕见)。
-
多态性是在现代 C++ 中使用指向已分配对象的指针而不仅仅是一个对象的主要原因之一。
-
如果您的向量包含您不会共享的对象,那么我不建议为它们使用
shared_ptr。shared_ptr如果您不打算使用它,则无需支付记账费用。 -
如果您了解整个 API 和所有数据结构,那么您就知道哪些向量需要共享指针,哪些不需要。好吧,有时事情会出错,计划必须适应,但你所说的那种变化是根本性的,表明存在流程问题。您应该解决这个问题,而不是采用您建议的方法。