我如何处理队列前端和弹出功能

how do i deal with the queue front and pop function

我在 c++ 参考和队列头文件中读到 queue.front() 函数 returns 一个参考。 queue.pop() 似乎删除了队列中的那个元素。

在我的例子中,队列存储字符串(消息)有一个 class 在队列中存储一些字符串,一些线程调用一个看起来像这样的函数

pthread_mutex_lock(&this->mutex);

while(this->TEMP.size() == 0){
    usleep(10);
}

string line;



line = this->TEMP.front();

this->TEMP.pop();

pthread_mutex_unlock(&this->mutex);
return line;;
}

所以如果它是一个引用,那么调用该函数的线程将会死掉或者发生一些可怕的事情,因为内存在 pop 之前被释放了。

到目前为止我说的对吗???

那我该怎么做呢???

您正在呼叫 line.operator=(std::string& source)。引用 source 是从 TEMP.front() 返回的引用初始化的。一旦该运算符 returns,赋值就完成了。您现在拥有该字符串的两个副本。在 .pop 之后,原来的消失了,但 line 仍然保持它的价值。