我在 C++ 引用和队列头文件中读到,queue.front() 函数返回一个引用。 queue.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)
。引用 source
是根据 TEMP.front()
返回的引用进行初始化的。一旦该运算符返回,分配就完成了。您现在拥有该字符串的两个拷贝。在 .pop
之后,原来的内容消失了,但 line
仍然保留其值。
关于c++ - 我如何处理队列前端和弹出功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28042436/