我已经通过了一个承诺作为对线程的引用。之后,promise 通过 std::move 移动到向量中。这会在执行软件时导致分段错误。
我认为在移动承诺后线程中的引用永远不会更新?如何将承诺传递给线程,以便之后可以移动它?请参阅我的问题的以下代码示例。
#include <iostream>
#include <thread>
#include <vector>
#include <future>
class Test {
public:
std::thread t;
std::promise<int> p;
Test(std::thread&& rt, std::promise<int>&& rp) : t(std::move(rt)), p(std::move(rp)) {}
};
int main()
{
std::vector<Test> tests;
{
auto p = std::promise<int>();
std::thread t ([&p]{
std::cout << 1;
p.set_value(1);
});
tests.push_back(Test(std::move(t), std::move(p)));
}
for(Test& mytest : tests)
{
mytest.t.join();
}
}