0

我知道向量倾向于复制所有推入其中的对象。boost::shared_ptr我的问题是将指向 a 的指针存储在向量中而不是共享 ptr 本身是否有意义

4

3 回答 3

1

对于任何性能问题,唯一 100% 正确的答案是“分析并查看”。

但是,在这种特殊情况下,您应该直接将shared_ptrs 保留在其中(按值)。复制共享指针的开销很低。如果你的编译器支持移动,它甚至会被移动——尽管你可能会使用std::shared_ptr,对吧?

无论如何,您将如何在其中仅存储指针?动态分配shared_ptrs?你将如何控制自己的所有权?

于 2013-04-12T09:37:15.697 回答
0

shared_ptr 旨在管理原始指针的生命周期。通过容器存储和访问它们几乎不是开销。如果您将指向 shared_ptr 的指针存储到容器中,那么您将破坏 shared_ptr 的全部目的。

于 2013-04-12T09:44:35.593 回答
0

为什么要问“贵”?除了正确性之外,您首先关心的应该是“它是否安全”。您的第二个关注点应该是“它是否可读和可维护”。如果您知道(通过分析)您在性能敏感领域工作,那么仅成本是您最关心的 5 个问题。即便如此,几乎在每种情况下都有“安全第一”。

所以:

  • 不要使用指向shared_ptr的指针,因为很难做到安全和正确。
  • 不要使用指向 的指针shared_ptr,因为它很脆弱,难以解读,并且让每个人都想知道你为什么这样做(可维护性)
  • 不要使用指针,shared_ptr 除非您真的知道复制shared_ptrs 是一个性能问题,并且您通过分析知道并且您没有其他更安全、更可维护且性能相同的解决方案

tl;博士不要使用指向shared_ptr.

于 2013-04-12T10:17:42.820 回答