我在堆中的对象和对它的引用。 有某些情况下在该对象被删除,但指向的位置不知道的参考。 如何检查是否存在堆中真实的数据?
例如:
from PySide import *
a = QProgressBar()
b = QProgressBar()
self.setIndexWidget(index,a)
self.setIndexWidget(index,b)
然后, a
对象被删除,但print(a)
返回一个有效的地址。 不过,如果你尝试a.value()
-发生运行时错误(C ++对象已被删除)。
a is None
返回False
。
利用sip
模块,阅读更多关于sip
这里
import sip
a = QProgressBar()
sip.isdeleted(a)
False
sip.delete(a)
a
<PyQt4.QtCore.QObject object at 0x017CCA98>
sip.isdeleted(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: underlying C/C++ object has been deleted
对于PySide
对象,您将需要shiboken
模块执行对象查询。
访问shiboken模块机制的文档 :
import shiboken
print shiboken.isValid(a)
它在文档中当一个对象需要另一个对象的缺失责任明确提到。 在你的榜样,您可以在此看到Qt的文档 :
如果索引插件A被替换为索引插件B,索引插件A将被删除。