在各处使用共享指针有哪些陷阱?

时间:2019-09-06 12:33:10

标签: c++ pointers vector

我们的代码库使用许多向量。这些向量中的某些向量彼此共享对象,即它们包含std::shared_ptr的共享对象。问题是:代码库仍处于活跃的开发阶段,通常需要将一些包含值的向量重写为包含共享指针的向量。这很乏味。所以我想出了一个主意:只需将所有向量作为共享指针的向量即可。

问题:可以吗?我应该注意哪些警告?有什么问题吗?

我进行了一些简单且可能是幼稚的测量,并且在初始化和查询值的向量和共享指针的向量之间在性能上几乎没有区别。

如果性能不是问题,我还有什么要注意的吗?

1 个答案:

答案 0 :(得分:4)

我认为这是个坏主意,JAVA会这样做,当您松散地跟踪对象是共享的并且在巨大的代码库中的某个位置进行临时更改来“破坏”它时,通常会导致问题。

std::vector与内部对象一起使用时几乎没有性能问题,除非所包含的对象确实很大或具有复杂的构造函数。

仅在严格需要时,才应在向量中使用指针(共享或不共享),例如:

  • 如果包含的对象是多态的
  • 如果所包含的对象具有一些不可平凡的字段(IE std::mutex
  • 如果所包含的对象确实很大(即视频帧)