代码是这样的
while (running_) {
// pop是阻塞的
if (!tasks_.pop(&task)) {
break;
}
if (task.first && task.second) {
worker->handle(task.first, task.second);
// if (task.first) task.first.reset();
// if (task.second) task.second.reset();
}
}
task里是一个pair<shared_ptr,shared_ptr>
本来等指针指针析构时调用对象的析构函数,发现偶尔会不调用,找了一下午才发现这问题。
pop出智能指针之后,在下一次pop时阻塞,导致上次pop的智能指针引用计数未即时归零。
后面加了两个if后问题解决