diff --git a/src/DynamicQObject.h b/src/DynamicQObject.h index f09fea9..3c2f006 100644 --- a/src/DynamicQObject.h +++ b/src/DynamicQObject.h @@ -16,6 +16,8 @@ template class DynamicQObject : public T, public IDynamicQObject { + using SafeQMetaObjectPtr = std::unique_ptr; + public: /// Constructor DynamicQObject(); @@ -73,12 +75,12 @@ private: const std::function& afterSlotAdded, const std::function& afterPropertyAdded); + SafeQMetaObjectPtr m_metaObject; QHash m_signalsByName; QHash m_signalsBySignature; QHash m_slotsByName; QHash m_slotsBySignature; QHash m_propertiesByName; - QScopedPointer m_metaObject; void* m_dObjectPointer; IDynamicQObject::Callback m_dObjectCallback; }; @@ -86,6 +88,7 @@ private: template DynamicQObject::DynamicQObject() : T() + , m_metaObject(nullptr, ::free) , m_dObjectPointer(nullptr) , m_dObjectCallback(nullptr) { @@ -134,7 +137,7 @@ bool DynamicQObject::registerSlot(const QString& name, methodBuilder.setAttributes(QMetaMethod::Scriptable); }; - auto newMetaObject = recreateMetaObjectBuilder(m_metaObject.data(), + auto newMetaObject = recreateMetaObjectBuilder(m_metaObject.get(), afterSignalAdded, afterSlotAdded, afterPropertyAdded); @@ -166,7 +169,7 @@ bool DynamicQObject::registerSignal(const QString& name, const QList::registerProperty(const QString& name, builder.setConstant(true); }; - auto newMetaObject = recreateMetaObjectBuilder(m_metaObject.data() + auto newMetaObject = recreateMetaObjectBuilder(m_metaObject.get() , afterSignalAdded , afterSlotAdded , afterPropertyAdded); @@ -272,7 +275,7 @@ bool DynamicQObject::emitSignal(const QString& name, const QList& a template const QMetaObject* DynamicQObject::metaObject() const { - return m_metaObject.data(); + return m_metaObject.get(); } template