使此代码运行有哪些解决方法?代码导致"尝试引用已删除的函数"。 unique_ptr
在循环中分配,然后传递给线程,后来摆脱了。
boost::thread_group threads;
std::unique_ptr<ScenarioResult> scenario_result;
while ((scenario_result = scenarioStock.getNextScenario()) != nullptr)
{
threads.create_thread(boost::bind(&Simulation::RunSimulation, boost::ref(grid_sim), std::move(scenario_result)));
}
答案 0 :(得分:1)
您可以使用lambda表达式而不是boost::bind
threads.create_thread([&] { grid_sim.RunSimulation(std::move(scenario_result)); });
您正在执行的操作的问题是create_thread
尝试复制bind
创建的仿函数,并且由于unique_ptr
绑定参数的存在而导致失败functor move-only。