我知道向量倾向于复制所有推入其中的对象。boost::shared_ptr
我的问题是将指向 a 的指针存储在向量中而不是共享 ptr 本身是否有意义
问问题
47 次
3 回答
1
对于任何性能问题,唯一 100% 正确的答案是“分析并查看”。
但是,在这种特殊情况下,您应该直接将shared_ptr
s 保留在其中(按值)。复制共享指针的开销很低。如果你的编译器支持移动,它甚至会被移动——尽管你可能会使用std::shared_ptr
,对吧?
无论如何,您将如何在其中仅存储指针?动态分配shared_ptr
s?你将如何控制自己的所有权?
于 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_ptr
s 是一个性能问题,并且您通过分析知道并且您没有其他更安全、更可维护且性能相同的解决方案
tl;博士不要使用指向shared_ptr
.
于 2013-04-12T10:17:42.820 回答