2

如何检查指针的内容是否被删除?如果我像这样使用 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->function() 被调用并因此导致访问冲突吗?当我删除 p 时,_p 会发生什么?

4

1 回答 1

2

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

文档中引用:

请注意,类 T 必须继承 QObject,否则会导致编译或链接错误。

于 2014-12-11T20:10:49.663 回答