Qt Documentation指出QtConcurrent::run
可用于通过将指向对象作为第一个参数来运行在另一个线程的成员函数。但是,我找不到任何信息,如果智能指针可以在这种情况下使用。具体来说,我想与std::shared_ptr
使用它。
这应该是不可能的智能指针传递给QtConcurrent ::运行,因为没有可用的匹配超载。
我会用lambda表达式提出一个解决方案:
std::shared_ptr<Obj> 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);
但是,这是相当冒险,因为你不必担心你的对象的生命周期。
最后,因为它是更安全,我宁愿第一种方法。