C++ lambda 常量值引用在线程中删除
C++ lambda const value reference got deleted in thread
我遇到了以下情况:
void Plugin::sendMessage(const QString& jid, const QString &message) {
qDebug() << "SENDING TO JID1: " << jid;
QtConcurrent::run([&, this]() {
qDebug() << "SENDING TO JID2: " << jid;
}
}
生成下一个输出:
发送到 JID1:"test@xmpp.org"
发送到 JID2:"
然后它崩溃了。看起来 lambda 中不再存在jid
,但为什么呢?那么,我如何通过引用在此代码中使用变量呢?
如果你来自Java背景,请注意C++和Java中的引用意味着非常不同的东西。在Java中,引用是垃圾回收的,因此很容易根据需要延长它们的生命周期。在C++中没有垃圾回收,引用变量生存期与被引用对象的生存期关系不大。
另请参阅C++参考和Java参考或程序员为什么C++和Java都使用"引用"的概念,但意义不同? 以获得更多解释。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++中的线程安全删除
- 线程调用的函数对对象删除是否安全?
- 删除原子多线程代码中的容器
- C++ 线程创建/删除与线程停止/恢复
- 从矢量中删除已完成的线程
- 完全删除 QApplication 实例并在另一个线程中重新创建它
- 在 DTor 之前删除的静态对象创建的线程?
- 线程池 - 如何在成员线程完成后删除工作线程(此)
- C++多线程程序尝试使用已删除的函数
- C 线程:尝试使用已删除的函数
- 如何安全地删除ATL DLL中的std ::线程
- 从另一个线程中删除对齐的内存
- 删除boost ::线程后代
- boost ::线程在删除可加入线程时存在什么问题
- 删除线程时崩溃
- 从多线程程序中安全地删除对象
- C++线程和Promise:试图引用已删除的函数
- MFC:阻止线程删除指向其 ControllingFunction 的输入指针
- 在C++中,一个线程中的new可以分配另一个线程删除的内存吗