【发布时间】:2015-06-16 19:57:53
【问题描述】:
using namespace std;
vector< shared_ptr<MyObject> > objects;
// objects gets filled in by something
random_shuffle(objects.begin(), objects.end());
出于任何原因,这是否不好或效率低下?有更好的方法吗? (我希望我的智能指针数组随机排序)
编辑: 我问是因为会有很多交换,而且由于我不知道幕后的实现,所以我想知道是否有可能:
- 大量引用计数可能会像疯了一样上下波动,从而影响性能
- 更糟糕的是,是否存在可能导致内存泄漏的循环引用
【问题讨论】:
-
为什么会不好?你只是重新订购一个容器。你担心会发生什么?
-
随机排序,你的意思是随机洗牌?
-
a.) 它可能效率低下,每次将指针分配给彼此时,引用计数都会上升和下降。或 b.) 也许循环引用可能会人为地增加引用计数,从而导致内存泄漏。我不知道,这就是我问的原因(我不确定引擎盖下发生了什么)。
-
使用 C++11,这将移动 shared_ptr's,这是有效的。在 C++11 之前,这可能比您想象的要贵一些。但很难想象会出现如此昂贵的情况,以至于您会决定避免使用它。
标签: c++ vector shared-ptr smart-pointers shuffle