【问题标题】:QSignalSpy and std::shared_ptrQSignalSpy 和 std::shared_ptr
【发布时间】:2016-09-12 08:35:30
【问题描述】:

我想测试一段 Qt 代码,它使用带有 std::shared_ptr 作为参数的信号/槽。

我的问题是 QSignalSpy 类,它适用于所有其他类型的参数,但在使用标准共享指针时似乎表现不佳。实际上,takeFirst 方法返回一个 QVariant 列表。我可以将参数转换为 shared_ptr 做类似的事情:

QVERIFY(arguments.at(0).value<std::shared_ptr<Canard>>() == canardInstance); // verify the first argument

但是我最终得到了 2 个引用同一个堆内存的智能指针,并且在超出当前范围时它崩溃了。有没有办法在我的情况下使用 QSignalSpy ?

谢谢!

【问题讨论】:

  • 您需要共享指针吗? Qt 不适用于共享指针,因为它有自己的“内存管理”。如果我不得不做我通常做的解决方法是将 shared_ptr 存储在类中,以便它们保持内存活动,然后使用 raw-ptr(或索引)在插槽中访问它们。
  • 是的,我不想要一个有父级的 QObject,而是一个可以与多个线程共享并在没有人需要时删除的东西。
  • 我还没有和那些合作过,但你可以试试看QSharedPointer。否则我不会看到在 Qt 中轻松使用 std 共享指针的方法。
  • 我的错,实际上它的行为与 shared_ptrs 的计划一样,我有另一个原因的内存损坏......!结束问题

标签: c++ qt c++11 shared-ptr qsignalspy


【解决方案1】:

其实我完全没有抓住重点。它工作正常(意味着引用计数按预期工作)但由于另一个原因我得到了内存损坏。我尝试使用 QSharedPointer 并获得相同的行为。

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 2013-04-16
    • 2014-01-03
    • 1970-01-01
    • 2012-09-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多