将r值引用唯一指针传递到lambda的正确方法



我是C++的新手,正在研究现有的代码库,并试图找出如何将r-value ref唯一指针传递到lambda中并正确地转移所有权。

目前,我们有:

void MyClass::onResponse(uniq_ptr<Foo>&& response) {
parent_.doSomething(std::move(response));
}

我需要对此进行修改,以便使用函数postToMainThread在主线程上执行一些操作(基本上是启动计时器(,该函数接受lambda,然后像以前一样调用doSomething。用一个伪响应发布到主线程工作得很好,但当我试图传递/移动lambda时,我会得到一个segfault,因为另一边的某个东西试图获得响应的所有权:

void MyClass::onResponse(uniq_ptr<Foo>&& response) {
postToMainThread([this, &response]() {
// Do some stuff that must be on main thread
parent_.doSomething(std::response);
}
}

我看到了许多使用postToMainThread([this, response = std::move(response)]() {...的示例,但由于唯一指针错误的复制构造函数,这些示例无法编译。我想我需要转移响应的所有权,但我不确定如何转移。

好的,想好了。我向MyClass添加了一个response_属性,并在MyClass::onResponse()中移动了它。这反过来触发了帖子和计时器,后者调用了一个新的MyClass::XXX()。这又利用所存储的响应执行CCD_ 7。哇!

最新更新