unique_ptr用法,从集合中获取

时间:2014-03-02 17:39:18

标签: c++11

我刚开始使用unique_ptr,我有一个std :: unique_ptr的deque:

typedef std::unique_ptr<Job> JobPtr;
typedef std::deque<JobPtr> JobDeque;

//Declaration in another class :
UserQueues::JobDeque _realTimeDeque;

在我的代码中,我想获取Deque的最后一个元素,因此返回unique_ptr。我让编译器抱怨直接复制unique_ptr,如果我使用std :: move,我意识到我将所有权从Deque转移到我的本地unique_ptr,命名为'highestJob',最终给出了一个seg错误(我想是segfault来了)当本地unique_ptr在堆栈中被破坏时,尝试打印我的Deque,因此deque持有垃圾)。

这是我当前的解决方案,但是我想知道在本地抓取unique_ptr的整洁方式是什么,所以我可以在所包含的对象上调用一些方法,同时保持我的Deque的所有权。

    if(_realTimeDeque.size() > 0)
    {
       //I want a handle of the last element which is a unique_ptr :
       UserQueues::JobPtr *highestJob = &_realTimeDeque.back();

       (*highestJob)->decreaseExecTime();

       if((*highestJob)->execTimeZero())
       {
           _realTimeDeque.pop_back(); 
       }
    }

1 个答案:

答案 0 :(得分:3)

这个怎么样:

if (_realTimeDeque.size() > 0)
{
   _realTimeDeque.back()->decreaseExecTime();

    if (_realTimeDeque.back()->execTimeZero())
    {
        _realTimeDeque.pop_back(); 
    }
}

或者,如果您想使用局部变量:

if (_realTimeDeque.size() > 0)
{
   Job & job = *_realTimeDeque.back();

   job.decreaseExecTime();

    if (job.execTimeZero())
    {
        _realTimeDeque.pop_back(); 
    }
}