gpt4 book ai didi

c++ - move 会跟踪引用吗?

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:51 25 4
gpt4 key购买 nike

我想知道下面的代码是否可以安全使用,如果不能,是否可以使其安全?

{
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 及其捕获状态吗?

最佳答案

Will the lambda keep track of the proper reference after performing std::move?

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

Will the lifetime of the state be extended?

state 的生命周期在封闭范围结束时结束。 std::pair 中状态的生命周期,您将 state 的值 move 到其中,当然将由 std 的生命周期决定: :vector 你将它放置/插入。

Can I improve this to create a pair of a lambda and its captured state?

一个解决方案,虽然它使用动态存储,但是使用std::unique_ptr:

{
auto state = std::make_unique<ThreadState>(ThreadState::Running);
vec.emplace_back(
std::async([s = state.get()] ()
{
*s = ThreadState::Waiting;
}),
std::move(state)
);
}

关于c++ - move 会跟踪引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44516331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com