【问题标题】:Correct way to pass r-value reference unique pointer into lambda将 r 值引用唯一指针传递给 lambda 的正确方法
【发布时间】: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)]() {... 的示例,但由于唯一指针错误的复制构造函数而无法编译。我知道我需要转移响应的所有权,但我不确定如何。

【问题讨论】:

标签: c++ lambda unique-ptr


【解决方案1】:

好的,想通了。我在 MyClass 中添加了一个 response_ 属性,并将其移动到 MyClass::onResponse() 中。这反过来又触发了帖子和计时器,它调用了一个新的MyClass::XXX()。这反过来使用存储的响应执行parent_.doSomething(std::move(response_))。呼!

【讨论】:

    猜你喜欢
    • 2013-10-27
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    相关资源
    最近更新 更多