如何处理队列前端和 POP 功能

how do i deal with the queue front and pop function

本文关键字:前端 POP 功能 队列 何处理 处理      更新时间:2023-10-16

我在 C++ 引用和队列头文件中读到 Queue.front() 函数返回引用。Tracking.pop() 似乎删除了队列中的该元素。

在我的例子中,队列存储字符串

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

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) .引用sourceTEMP.front() 返回的引用初始化。一旦该操作员返回,分配就完成了。现在,您有两个字符串副本。.pop之后,原版消失了,但line仍然保持着它的价值。