【发布时间】:2018-03-08 03:40:42
【问题描述】:
我是智能指针的新手。最近我开始进行一些并行模拟,我认为shared_ptr 将有助于防止内存泄漏。我听说增加实例数量会导致不可忽略的额外时间开销,所以我希望避免这样做。
在我的代码中,我使用 priority_queue 来管理模拟中的事件。为了确保我理解这些容器中的 shared_ptr 会发生什么,我做了一些测试:
std::priority_queue<std::shared_ptr<Base>> queue;
queue.push(std::make_shared<Derived>());
std::shared_ptr<Base> p = queue.top();
//std::shared_ptr<Base> p = std::move(queue.top());
std::cout << "Created a shared Derived (as a pointer to Base)\n"
<< " p.get() = " << p.get()
<< ", p.use_count() = " << p.use_count() << '\n';
使用上述两种不同的方法从priority_queue 中获取指针,我期待第二种方法在use_count() 中返回1。但是,无论我是否使用 std::move() 来获取队列中的顶部指针,我都看到了 2 的值。我用g++ -std=c++0x [FileName]编译
谁能指出我做错了什么?以上两种方法是否都表明我还有额外的时间?
【问题讨论】:
-
可能与
topreturns 是const&的事实有关。此外,您可能不想movetop的结果,因为queue仍然认为它是有效的。 -
您是否费心测量增加
shared_ptr引用计数是否真的是您的瓶颈,然后再跳过去避免它? -
您是否考虑过使用
std::unique_ptr?谁共享队列中的对象? -
老实说,我认为这不会大幅增加总运行时间。不过我还是很好奇。
-
啊,纳米,我刚刚看到你不能把
unique_ptr放在priority_queue中...
标签: c++ c++11 shared-ptr move