Reputation: 1105
I have an object in the heap and a reference to it. There are certain circumstances in which the object gets deleted but the reference that points to its location doesn't know that. How can I check if there is real data in the heap?
For example:
from PySide import *
a = QProgressBar()
b = QProgressBar()
self.setIndexWidget(index,a)
self.setIndexWidget(index,b)
Then the a
object gets deleted but print(a)
returns a valid address. However if you try a.value()
- runtime error occurs (C++ object already deleted).
a is None
returns False
.
Upvotes: 6
Views: 8364
Reputation: 2333
For the PySide
objects you'll need the shiboken
module to perform object queries. For Pyside2
, you'll need shiboken2
.
import shiboken # shiboken2
print shiboken.isValid(a)
Upvotes: 16
Reputation: 250931
use sip
module, read more about sip
here
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
Upvotes: 5