QtConcurrent::run 可以与指向对象的智能指针一起使用吗?
Can QtConcurrent::run be used with smart pointers to objects?
Qt Documentation 指出 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);
但这相当冒险,因为您必须担心对象的生命周期。
最后,我更喜欢第一种方法,因为它更安全。
Qt Documentation 指出 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);
但这相当冒险,因为您必须担心对象的生命周期。
最后,我更喜欢第一种方法,因为它更安全。