【发布时间】:2020-04-07 18:55:06
【问题描述】:
我是 C++ 新手,正在研究现有的代码库,并试图弄清楚如何将 r 值 ref 唯一指针传递给 lambda 并正确转移所有权。
目前,我们有:
void MyClass::onResponse(uniq_ptr<Foo>&& response) {
parent_.doSomething(std::move(response));
}
我需要修改它以使用函数postToMainThread 在主线程上做一些事情(基本上是触发一个计时器),该函数需要一个 lambda,然后像以前一样调用doSomething。使用虚拟响应发布到主线程可以正常工作,但是当我尝试传递/移动 lambda 时,我得到一个段错误,因为另一端的某些东西试图获取响应的所有权:
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)]() {... 的示例,但由于唯一指针错误的复制构造函数而无法编译。我知道我需要转移响应的所有权,但我不确定如何。
【问题讨论】:
-
[this, response = std::move(response)]应该是你想要的。很可能,问题出在postToMainThread -
是的,
std::move(response)应该可以工作了。
标签: c++ lambda unique-ptr