c++ - QtConcurrent::run 可以与指向对象的智能指针一起使用吗?
问题描述
Qt 文档指出,QtConcurrent::run
通过将指向对象的指针作为第一个参数传递,可用于在另一个线程中运行成员函数。但是,如果在这种情况下可以使用智能指针,我找不到任何信息。具体来说,我想将它与std::shared_ptr
.
解决方案
应该不可能将智能指针传递给 QtConcurrent::run 因为没有匹配的重载可用。
我会建议使用 lambdas 的解决方案:
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);
但这非常冒险,因为您必须担心对象的生命周期。
最后,我更喜欢第一种方法,因为它更安全。
推荐阅读
- excel - VBA:FunctionaArray 的类型不匹配错误
- node.js - 使用 Google/Dialogflow API 获取所有代理环境和版本
- android - 如何统一从插件接收mp3文件?
- alexa - InvalidSlotTypeLiteral:意图“RawText”中插槽“Text”的插槽类型“AMAZON.LITERAL”无效
- php - Sonata Admin - 更改订单父类别
- c++ - 为什么 deque 的 pop_front() 和 pop_back() 不是 noexcept?
- mercurial - 如何检查 Mercurial 存储库的一致性(校验和)?
- css - 按下时更改传单簇的样式
- python - PyCharm PEP 8:用于视觉缩进的续行缩进不足
- python - 当项目存储在 NAS 上时 PyCharm 重新索引