这是使用QPointer的更正方式吗?

时间:2014-12-11 19:03:31

标签: c++ qt qpointer

我如何检查指针的内容是否被删除?如果我像这样使用QPointer:

myClass::myClass(myStruct* p){
 _p = p;//_p is a QPointer<myStruct>
}

myClass::function(){
if(_p) {_p->function();}
}

然后我

myStruct* p = new myStruct();
myClass A(p);
delete p;
A.function();

最后一个A.function()会调用_p-&gt;函数(),从而导致访问冲突吗?当我删除p时,_p会发生什么?

1 个答案:

答案 0 :(得分:2)

如果myStructQObject子类,那么您的代码应该可以正常工作,就像显示的代码段一样。 QObject析构函数将清除指向被破坏实例的每个QPointer。如果它不是QObject子类,那么你应该得到编译/链接错误。

来自docs

的引用
  

请注意,类T必须继承QObject,或者编译或链接错误   会结果。

相关问题