diff options
-rw-r--r-- | sources/pyside2/libpyside/signalmanager.cpp.in | 13 | ||||
-rw-r--r-- | sources/pyside2/libpyside/signalmanager.h | 9 |
2 files changed, 17 insertions, 5 deletions
diff --git a/sources/pyside2/libpyside/signalmanager.cpp.in b/sources/pyside2/libpyside/signalmanager.cpp.in index ea0d692d8..9e2a1a9af 100644 --- a/sources/pyside2/libpyside/signalmanager.cpp.in +++ b/sources/pyside2/libpyside/signalmanager.cpp.in @@ -142,11 +142,16 @@ PyObjectWrapper::~PyObjectWrapper() Py_XDECREF(m_me); } -PyObjectWrapper& PyObjectWrapper::operator=(const PySide::PyObjectWrapper& other) +void PyObjectWrapper::reset(PyObject *o) { - Py_XINCREF(other.m_me); + Py_XINCREF(o); Py_XDECREF(m_me); - m_me = other.m_me; + m_me = o; +} + +PyObjectWrapper& PyObjectWrapper::operator=(const PySide::PyObjectWrapper& other) +{ + reset(other.m_me); return *this; } @@ -207,7 +212,7 @@ QDataStream &operator>>(QDataStream& in, PyObjectWrapper& myObj) Shiboken::AutoDecRef value(PyObject_CallFunctionObjArgs(eval_func, pyCode.object(), 0)); if (!value.object()) value.reset(Py_None); - myObj = PyObjectWrapper(value); + myObj.reset(value); return in; } diff --git a/sources/pyside2/libpyside/signalmanager.h b/sources/pyside2/libpyside/signalmanager.h index c4d57c333..745c1e55a 100644 --- a/sources/pyside2/libpyside/signalmanager.h +++ b/sources/pyside2/libpyside/signalmanager.h @@ -53,12 +53,19 @@ namespace PySide class PYSIDE_API PyObjectWrapper { public: + PyObjectWrapper(PyObjectWrapper&&) = delete; + PyObjectWrapper& operator=(PyObjectWrapper &&) = delete; + PyObjectWrapper(); explicit PyObjectWrapper(PyObject* me); PyObjectWrapper(const PyObjectWrapper &other); + PyObjectWrapper& operator=(const PyObjectWrapper &other); + + void reset(PyObject *o); + ~PyObjectWrapper(); operator PyObject*() const; - PyObjectWrapper& operator=(const PyObjectWrapper &other); + private: PyObject* m_me; }; |