我在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释放。
到目前为止我是对的吗?
所以我该怎么做?
答案 0 :(得分:3)
您正在呼叫line.operator=(std::string& source)
。引用source
是从TEMP.front()
返回的引用初始化的。一旦该运算符返回,就完成了赋值。您现在有两个字符串副本。在.pop
之后,原始文件已经消失,但line
仍然保留其原始值。