我有一个对象
priority_queue<SState,vector<SState>,greater<SState> > m_queue;
这是一个类的成员,其中SState是一个定义
的内部结构struct SState
{
SState(int p, int b):priority(p),bbb(b){}
~SState(){}
int priority;
int bbb;
};
和比较器
inline bool operator > (const MyClass::SState& left, const MyClass::SState& right)
{
return left.priority > right.priority;
}
我有一个创建SState对象的方法。
m_queue.push(SState(p,b));
以及其他方法
if (!m_queue.empty())
{
const SState& state = m_queue.top();
...
m_queue.pop();
}
我有一堆腐败。 怎么做对了?
答案 0 :(得分:0)
您的问题可能是您在致电state
后使用m_queue.pop();
,导致访问对不再存在的项目的引用。您需要稍后将pop
调用移动到该函数中,或者在从堆栈中获取该项后对其进行复制。
答案 1 :(得分:0)
const SState& state = m_queue.top();
你有参考堆栈对象的堆副本。但是这个引用并没有延长对象的生命周期。
所以
m_queue.pop();
对象正在破坏,你不能再使用它了。