移动会跟踪参考吗?

时间:2017-06-13 08:38:50

标签: c++ move

我想知道以下代码是否可以安全使用,如果没有,是否可以使其安全?

{
    ThreadState state = ThreadState::Running;
    auto pair = std::make_pair(std::async([&state] ()
    {
        state = ThreadState::Waiting;
    }), std::move(state));
    someVector.emplace(std::move(pair));
}

执行std::move后,lambda会跟踪正确的引用吗?国家的寿命会延长吗?我可以改进这一点来创建一对lambda及其捕获状态吗?

1 个答案:

答案 0 :(得分:2)

  

执行std :: move后,lambda会跟踪正确的引用吗?

不,lambda将引用移动的state,它现在具有不确定的值。

  

国家的寿命会延长吗?

当封闭范围结束时,state的生命周期结束。移动std::pair值的state内的状态的生命周期当然取决于你{/ 1}}的生命周期/推进它的生命周期。

  

我可以改进这一点来创建一对lambda及其捕获状态吗?

虽然使用动态存储,但一种解决方案是使用std::vector

std::unique_ptr