C++ QtConcurrent::run能否与指向对象的智能指针一起使用?

C++ QtConcurrent::run能否与指向对象的智能指针一起使用?,c++,multithreading,qt,smart-pointers,qtconcurrent,C++,Multithreading,Qt,Smart Pointers,Qtconcurrent,声明QtConcurrent::run可用于在另一个线程中运行成员函数,方法是将指向对象的指针作为第一个参数传递。但是,如果在这种情况下可以使用智能指针,我找不到任何信息。具体地说,我想将它与std::shared_ptr一起使用,应该不可能将智能指针传递给QtConcurrent::run,因为没有匹配的重载可用 我建议使用lambdas解决方案: std::shared_ptr<Obj> obj_ptr(new Obj()); QtConcurrent::run([obj_ptr

声明
QtConcurrent::run
可用于在另一个线程中运行成员函数,方法是将指向对象的指针作为第一个参数传递。但是,如果在这种情况下可以使用智能指针,我找不到任何信息。具体地说,我想将它与
std::shared_ptr

一起使用,应该不可能将智能指针传递给QtConcurrent::run,因为没有匹配的重载可用

我建议使用lambdas解决方案:

std::shared_ptr<Obj> obj_ptr(new Obj());
QtConcurrent::run([obj_ptr](){ obj_ptr->func(); });
std::shared_ptr obj_ptr(new obj());
QtConcurrent::run([obj_ptr](){obj_ptr->func();});
由于shared_ptr的内部引用计数器,您不必担心智能指针拥有的对象的生存时间,因为您在lambda函数中捕获了一个副本

另一种解决方案是传递原始指针:

std::shared_ptr<Obj> obj_ptr(new Obj());
QtConcurrent::run(obj_ptr.get(), &Obj::func);
std::shared_ptr obj_ptr(new obj());
QtConcurrent::run(obj_ptr.get(),&obj::func);
但这是相当危险的,因为你必须担心你的对象的生命时间

最后,我更喜欢第一种方法,因为它更安全