Qt 文档指出,通过将指向对象的指针作为第一个参数传递,可以使用QtConcurrent::run
在另一个线程中运行成员函数。但是,在这种情况下是否可以使用智能指针,我找不到任何信息。具体来说,我想将其与std::shared_ptr
一起使用。
应该
不可能将智能指针传递给 QtConcurrent::run,因为没有匹配的重载可用。
我会建议一个使用 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);
但这是非常危险的,因为您必须担心对象的使用寿命。
最后,我更喜欢第一种方法,因为它更安全。