我刚开始使用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();
}
}
答案 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();
}
}