【发布时间】: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