【发布时间】:2013-06-21 15:07:06
【问题描述】:
这更像是一个样式问题而不是性能问题。我刚刚将(大部分)我的指针转换为 shared_ptr 对象,并且不情愿地接受了weak_ptrs 作为原始指针的替代品。我的问题是,迭代共享指针对象的序列(比方说向量)的首选方法是什么?这是我一直在做的事情:
std::vector<std::shared_ptr<A>> my_sequence;
// Do something to fill my_sequence;
for (std::shared_ptr<A> const& ptr : my_sequence)
{
ptr->AMethod();
}
这违反了 *don't use shared_ptr references* 规则,那么有什么好的替代方法,为什么?
我要问的问题是;该技术是否稳健,即。对于 AMethod() 超小和 my_sequence 超大,此方法是否会由于 shared_ptr 副本而开始不必要地阻碍性能?它可读吗?简单吗?
【问题讨论】:
-
auto会做什么? (WWAD) -
创建shared_ptr的副本?
-
我自己对此很好奇,因为我还不是很懂 C++11,也没有可用的编译器来摆弄
-
如果您在基于范围的 for 中使用引用,那么您将不会制作不必要的副本。你正在做的很好,
auto& ptr也很好。 -
shared_ptr不是灵丹妙药。它应该在实际共享所有权时使用。非共享所有权由unique_ptr表示,非所有权由(原始)引用表示。weak_ptr用于必须遵守但不拥有的shared_ptr……但通常不是针对陈旧指针的良好防御做法。这将是最小的公分母,不是良好的编程习惯。
标签: c++ c++11 reference shared-ptr