C++ 从QVariant中强制删除QOjbect*导致Qt5中的seg故障

C++ 从QVariant中强制删除QOjbect*导致Qt5中的seg故障,c++,qt,C++,Qt,以下代码在使用Qt5时会导致分段错误,但在使用Qt4时不会出现问题 auto a=new QObject();//需要是QObject的子类,其他类不会发生 自动v=QVariant::fromValue(a); 删除一条; 自动p=QU变量(v); 我的项目中的用例是使用QSignalSpy进行单元测试: 。。。 //我需要按预期检查从模型工作中删除的对象 //和objectRemoved信号在收到事件后立即删除对象 QSignalSpy spy(&模型,信号(objectRemoved(O

以下代码在使用Qt5时会导致分段错误,但在使用Qt4时不会出现问题

auto a=new QObject();//需要是QObject的子类,其他类不会发生
自动v=QVariant::fromValue(a);
删除一条;
自动p=QU变量(v);
我的项目中的用例是使用
QSignalSpy
进行单元测试:

。。。
//我需要按预期检查从模型工作中删除的对象
//和objectRemoved信号在收到事件后立即删除对象
QSignalSpy spy(&模型,信号(objectRemoved(Object*));
...
assertEqual(间谍[0][0]。值(),myobject);//分段断层
我已经检查了qvariant_cast的实现是否与和不同,但我无法真正理解源代码

问题是

  • 指针是我所需要的,而不是数据,有什么方法可以检索它吗
  • 我是否应该这样做(投射已删除的指针)
  • 对我的单元测试有什么建议吗?我应该删除它还是有更好的解决方案

  • 谢谢

    你为什么玩指针?删除后只需检查模型的内容。例如,检查行计数。对于它的价值(实际上在
    QMetaObject::cast
    )将取消对非空指针的引用以检查其类型:
    返回(obj&&obj->metaObject()->继承(this))?obj:nullptr。因此,segfault.@vahancho项目确实检查了行数。我认为它希望确保移除的对象是预期的。我将从单元测试中删除检查,谢谢@G.M.谢谢你指出,我终于找到了segfault部分。需要更多的时间来理解为什么Qt在类型转换方面做得这么多…为什么要使用指针?删除后只需检查模型的内容。例如,检查行计数。对于它的价值(实际上在
    QMetaObject::cast
    )将取消对非空指针的引用以检查其类型:
    返回(obj&&obj->metaObject()->继承(this))?obj:nullptr。因此,segfault.@vahancho项目确实检查了行数。我认为它希望确保移除的对象是预期的。我将从单元测试中删除检查,谢谢@G.M.谢谢你指出,我终于找到了segfault部分。需要更多的时间来理解为什么Qt在类型转换方面做了这么多。。。