我想知道以下代码是否可以安全使用,如果没有,是否可以使其安全?
{
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及其捕获状态吗?
答案 0 :(得分:2)
执行std :: move后,lambda会跟踪正确的引用吗?
不,lambda将引用移动的state
,它现在具有不确定的值。
国家的寿命会延长吗?
当封闭范围结束时,state
的生命周期结束。移动std::pair
值的state
内的状态的生命周期当然取决于你{/ 1}}的生命周期/推进它的生命周期。
我可以改进这一点来创建一对lambda及其捕获状态吗?
虽然使用动态存储,但一种解决方案是使用std::vector
:
std::unique_ptr