【发布时间】:2014-12-11 19:03:31
【问题描述】:
如何检查指针的内容是否被删除?如果我像这样使用 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 会发生什么?
【问题讨论】:
-
使用常规指针无法检查,请参阅
QSharedPointer和QWeakPointer -
但是 QPointer 的文档说一旦删除它就会被强制转换为 0?
-
@ddriver 我看错了吗?
QObject析构函数将清除所有指向它的QPointers。 -
@hyde - 是的,你是对的。我的错。但它仅适用于派生的
QObject。