C++ lambda 常量值引用在线程中删除

C++ lambda const value reference got deleted in thread

本文关键字:线程 删除 引用 lambda 常量 C++      更新时间:2023-10-16

我遇到了以下情况:

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都使用"引用"的概念,但意义不同? 以获得更多解释。