From ee2b4e7cba8f7451ca974a1f461c90932f232624 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Mon, 18 May 2015 06:48:29 +0400 Subject: Properly initialize q_ptr (or avoid where it is not needed) Referencing a partially-constructed object is typically a bad design. Change-Id: I48ef92452202f6c8c0014e17efd20e2ee2ae7e40 Reviewed-by: Sean Harmer --- src/core/io/qabstractattribute.cpp | 5 ++--- src/core/io/qabstractattribute_p.h | 5 +---- src/core/io/qabstractbuffer.cpp | 5 ++--- src/core/io/qabstractbuffer_p.h | 6 +----- src/core/jobs/qaspectjob.cpp | 5 ++--- src/core/jobs/qaspectjob_p.h | 4 +--- src/core/nodes/qbackendnode.cpp | 8 +++++--- src/core/nodes/qbackendnode_p.h | 2 +- src/core/qbackendscenepropertychange.cpp | 6 +++--- src/core/qbackendscenepropertychange_p.h | 2 +- src/core/qscene.cpp | 9 +++------ src/core/qscenechange.cpp | 9 ++++++--- src/core/qscenechange_p.h | 2 +- src/core/qscenepropertychange.cpp | 6 +++--- src/core/qscenepropertychange_p.h | 2 +- src/core/resources/qframeallocator.cpp | 5 ++--- src/core/resources/qframeallocator_p.h | 5 +---- src/render/io/qattribute.cpp | 6 +++--- src/render/io/qattribute_p.h | 4 +--- src/render/io/qbuffer.cpp | 6 +++--- src/render/io/qbuffer_p.h | 3 +-- src/render/io/qmeshdata.cpp | 7 +++---- src/render/io/qmeshdata_p.h | 6 +----- 23 files changed, 48 insertions(+), 70 deletions(-) diff --git a/src/core/io/qabstractattribute.cpp b/src/core/io/qabstractattribute.cpp index 1dcd72c69..17ed41bf6 100644 --- a/src/core/io/qabstractattribute.cpp +++ b/src/core/io/qabstractattribute.cpp @@ -46,8 +46,7 @@ namespace Qt3D { \class Qt3D::QAbstractAttributePrivate \internal */ -QAbstractAttributePrivate::QAbstractAttributePrivate(QAbstractAttribute *qq) - : q_ptr(qq) +QAbstractAttributePrivate::QAbstractAttributePrivate() { } @@ -65,7 +64,7 @@ QAbstractAttribute::QAbstractAttribute(QAbstractAttributePrivate &dd, QAbstractB } QAbstractAttribute::QAbstractAttribute(QAbstractBufferPtr buf, int type, uint count, uint offset, uint stride) - : d_ptr(new QAbstractAttributePrivate(this)) + : d_ptr(new QAbstractAttributePrivate) { Q_D(QAbstractAttribute); d->m_buffer = buf; diff --git a/src/core/io/qabstractattribute_p.h b/src/core/io/qabstractattribute_p.h index 947dd2703..526a8d81d 100644 --- a/src/core/io/qabstractattribute_p.h +++ b/src/core/io/qabstractattribute_p.h @@ -43,7 +43,6 @@ QT_BEGIN_NAMESPACE namespace Qt3D { -class QAbstractAttribute; class QAbstractBuffer; typedef QSharedPointer QAbstractBufferPtr; @@ -51,10 +50,8 @@ typedef QSharedPointer QAbstractBufferPtr; class QT3DCORESHARED_EXPORT QAbstractAttributePrivate { public: - QAbstractAttributePrivate(QAbstractAttribute *qq); + QAbstractAttributePrivate(); - Q_DECLARE_PUBLIC(QAbstractAttribute) - QAbstractAttribute *q_ptr; int m_type; uint m_count; uint m_stride; diff --git a/src/core/io/qabstractbuffer.cpp b/src/core/io/qabstractbuffer.cpp index afef0d108..9337b923f 100644 --- a/src/core/io/qabstractbuffer.cpp +++ b/src/core/io/qabstractbuffer.cpp @@ -45,13 +45,12 @@ namespace Qt3D { \class Qt3D::QAbstractBufferPrivate \internal */ -QAbstractBufferPrivate::QAbstractBufferPrivate(QAbstractBuffer *qq) - : q_ptr(qq) +QAbstractBufferPrivate::QAbstractBufferPrivate() { } QAbstractBuffer::QAbstractBuffer() - : d_ptr(new QAbstractBufferPrivate(this)) + : d_ptr(new QAbstractBufferPrivate) { } diff --git a/src/core/io/qabstractbuffer_p.h b/src/core/io/qabstractbuffer_p.h index 68d04bce7..a393df4dd 100644 --- a/src/core/io/qabstractbuffer_p.h +++ b/src/core/io/qabstractbuffer_p.h @@ -44,15 +44,11 @@ QT_BEGIN_NAMESPACE namespace Qt3D { -class QAbstractBuffer; - class QT3DCORESHARED_EXPORT QAbstractBufferPrivate { public: - QAbstractBufferPrivate(QAbstractBuffer *qq); + QAbstractBufferPrivate(); - Q_DECLARE_PUBLIC(QAbstractBuffer) - QAbstractBuffer *q_ptr; QByteArray m_data; }; diff --git a/src/core/jobs/qaspectjob.cpp b/src/core/jobs/qaspectjob.cpp index 5442c5b88..9f12adb9c 100644 --- a/src/core/jobs/qaspectjob.cpp +++ b/src/core/jobs/qaspectjob.cpp @@ -45,13 +45,12 @@ namespace Qt3D { \class Qt3D::QAspectJobPrivate \internal */ -QAspectJobPrivate::QAspectJobPrivate(QAspectJob *qq) - : q_ptr(qq) +QAspectJobPrivate::QAspectJobPrivate() { } QAspectJob::QAspectJob() - : d_ptr(new QAspectJobPrivate(this)) + : d_ptr(new QAspectJobPrivate) { } diff --git a/src/core/jobs/qaspectjob_p.h b/src/core/jobs/qaspectjob_p.h index 1517f5100..d1fdac44c 100644 --- a/src/core/jobs/qaspectjob_p.h +++ b/src/core/jobs/qaspectjob_p.h @@ -49,11 +49,9 @@ class QAspectJob; class QAspectJobPrivate { public: - QAspectJobPrivate(QAspectJob *qq); + QAspectJobPrivate(); - Q_DECLARE_PUBLIC(QAspectJob) QVector > m_dependencies; - QAspectJob *q_ptr; }; } // Qt3D diff --git a/src/core/nodes/qbackendnode.cpp b/src/core/nodes/qbackendnode.cpp index df7662f1f..a897f6f04 100644 --- a/src/core/nodes/qbackendnode.cpp +++ b/src/core/nodes/qbackendnode.cpp @@ -48,8 +48,8 @@ namespace Qt3D { \class Qt3D::QBackendNodePrivate \internal */ -QBackendNodePrivate::QBackendNodePrivate(QBackendNode *qq, QBackendNode::Mode mode) - : q_ptr(qq) +QBackendNodePrivate::QBackendNodePrivate(QBackendNode::Mode mode) + : q_ptr(Q_NULLPTR) , m_mode(mode) , m_factory(Q_NULLPTR) , m_arbiter(Q_NULLPTR) @@ -83,8 +83,9 @@ QBackendNodePrivate *QBackendNodePrivate::get(QBackendNode *n) } QBackendNode::QBackendNode(QBackendNode::Mode mode) - : d_ptr(new QBackendNodePrivate(this, mode)) + : d_ptr(new QBackendNodePrivate(mode)) { + d_ptr->q_ptr = this; } QBackendNode::~QBackendNode() @@ -131,6 +132,7 @@ QBackendNode *QBackendNode::createBackendNode(QNode *frontend) const QBackendNode::QBackendNode(QBackendNodePrivate &dd) : d_ptr(&dd) { + d_ptr->q_ptr = this; } void QBackendNode::notifyObservers(const QSceneChangePtr &e) diff --git a/src/core/nodes/qbackendnode_p.h b/src/core/nodes/qbackendnode_p.h index b433c3f3a..104c4b4cd 100644 --- a/src/core/nodes/qbackendnode_p.h +++ b/src/core/nodes/qbackendnode_p.h @@ -56,7 +56,7 @@ class QT3DCORE_PRIVATE_EXPORT QBackendNodePrivate , public QObservableInterface { public: - QBackendNodePrivate(QBackendNode *qq, QBackendNode::Mode mode); + QBackendNodePrivate(QBackendNode::Mode mode); void setFactory(const QBackendNodeFactory *factory); void setArbiter(QLockableObserverInterface *arbiter) Q_DECL_OVERRIDE; diff --git a/src/core/qbackendscenepropertychange.cpp b/src/core/qbackendscenepropertychange.cpp index b0ed2ea40..86c334d42 100644 --- a/src/core/qbackendscenepropertychange.cpp +++ b/src/core/qbackendscenepropertychange.cpp @@ -51,8 +51,8 @@ namespace Qt3D { \class Qt3D::QBackendScenePropertyChangePrivate \internal */ -QBackendScenePropertyChangePrivate::QBackendScenePropertyChangePrivate(QBackendScenePropertyChange *qq) - : QScenePropertyChangePrivate(qq) +QBackendScenePropertyChangePrivate::QBackendScenePropertyChangePrivate() + : QScenePropertyChangePrivate() { } @@ -61,7 +61,7 @@ QBackendScenePropertyChangePrivate::~QBackendScenePropertyChangePrivate() } QBackendScenePropertyChange::QBackendScenePropertyChange(ChangeFlag type, const QNodeId &subjectId, QSceneChange::Priority priority) - : QScenePropertyChange(*new QBackendScenePropertyChangePrivate(this), type, Observable, subjectId, priority) + : QScenePropertyChange(*new QBackendScenePropertyChangePrivate, type, Observable, subjectId, priority) { } diff --git a/src/core/qbackendscenepropertychange_p.h b/src/core/qbackendscenepropertychange_p.h index fb8982024..392fa507a 100644 --- a/src/core/qbackendscenepropertychange_p.h +++ b/src/core/qbackendscenepropertychange_p.h @@ -49,7 +49,7 @@ class QBackendScenePropertyChange; class QBackendScenePropertyChangePrivate : public QScenePropertyChangePrivate { public: - QBackendScenePropertyChangePrivate(QBackendScenePropertyChange *qq); + QBackendScenePropertyChangePrivate(); virtual ~QBackendScenePropertyChangePrivate(); Q_DECLARE_PUBLIC(QBackendScenePropertyChange) diff --git a/src/core/qscene.cpp b/src/core/qscene.cpp index a4a9733fc..cf3329b25 100644 --- a/src/core/qscene.cpp +++ b/src/core/qscene.cpp @@ -49,15 +49,12 @@ namespace Qt3D { class QScenePrivate { public: - QScenePrivate(QAspectEngine *engine, QScene *qq) - : q_ptr(qq) - , m_engine(engine) + QScenePrivate(QAspectEngine *engine) + : m_engine(engine) , m_arbiter(Q_NULLPTR) { } - Q_DECLARE_PUBLIC(QScene) - QScene *q_ptr; QAspectEngine *m_engine; QHash m_nodeLookupTable; QMultiHash m_componentToEntities; @@ -70,7 +67,7 @@ public: QScene::QScene(QAspectEngine *engine) - : d_ptr(new QScenePrivate(engine, this)) + : d_ptr(new QScenePrivate(engine)) { } diff --git a/src/core/qscenechange.cpp b/src/core/qscenechange.cpp index 5632b2a4d..9c278d8b5 100644 --- a/src/core/qscenechange.cpp +++ b/src/core/qscenechange.cpp @@ -62,8 +62,8 @@ namespace Qt3D { \class Qt3D::QSceneChangePrivate \internal */ -QSceneChangePrivate::QSceneChangePrivate(QSceneChange *qq) - : q_ptr(qq) +QSceneChangePrivate::QSceneChangePrivate() + : q_ptr(Q_NULLPTR) { } @@ -72,8 +72,9 @@ QSceneChangePrivate::~QSceneChangePrivate() } QSceneChange::QSceneChange(ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, QSceneChange::Priority priority) - : d_ptr(new QSceneChangePrivate(this)) + : d_ptr(new QSceneChangePrivate) { + d_ptr->q_ptr = this; Q_D(QSceneChange); d->m_type = type; d->m_priority = priority; @@ -91,12 +92,14 @@ QSceneChange::~QSceneChange() QSceneChange::QSceneChange(QSceneChangePrivate &dd) : d_ptr(&dd) { + d_ptr->q_ptr = this; } /*! \internal */ QSceneChange::QSceneChange(QSceneChangePrivate &dd, ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, QSceneChange::Priority priority) : d_ptr(&dd) { + d_ptr->q_ptr = this; Q_D(QSceneChange); d->m_type = type; d->m_priority = priority; diff --git a/src/core/qscenechange_p.h b/src/core/qscenechange_p.h index b903b1035..d8dce5912 100644 --- a/src/core/qscenechange_p.h +++ b/src/core/qscenechange_p.h @@ -49,7 +49,7 @@ class QNodeId; class QSceneChangePrivate { public : - QSceneChangePrivate(QSceneChange *qq); + QSceneChangePrivate(); virtual ~QSceneChangePrivate(); Q_DECLARE_PUBLIC(QSceneChange) diff --git a/src/core/qscenepropertychange.cpp b/src/core/qscenepropertychange.cpp index 1f3ae9558..44c8ddcac 100644 --- a/src/core/qscenepropertychange.cpp +++ b/src/core/qscenepropertychange.cpp @@ -53,8 +53,8 @@ QMutex QScenePropertyChangePrivate::m_mutex; \class Qt3D::QScenePropertyChangePrivate \internal */ -QScenePropertyChangePrivate::QScenePropertyChangePrivate(QScenePropertyChange *qq) - : QSceneChangePrivate(qq) +QScenePropertyChangePrivate::QScenePropertyChangePrivate() + : QSceneChangePrivate() { } @@ -76,7 +76,7 @@ void QScenePropertyChangePrivate::operator delete(void *ptr, size_t size) } QScenePropertyChange::QScenePropertyChange(ChangeFlag type, ObservableType observableType, const QNodeId &subjectId, QSceneChange::Priority priority) - : QSceneChange(*new QScenePropertyChangePrivate(this), type, observableType, subjectId, priority) + : QSceneChange(*new QScenePropertyChangePrivate, type, observableType, subjectId, priority) { } diff --git a/src/core/qscenepropertychange_p.h b/src/core/qscenepropertychange_p.h index 309413593..ea88c8f7a 100644 --- a/src/core/qscenepropertychange_p.h +++ b/src/core/qscenepropertychange_p.h @@ -51,7 +51,7 @@ class QFrameAllocator; class QScenePropertyChangePrivate : public QSceneChangePrivate { public: - QScenePropertyChangePrivate(QScenePropertyChange *qq); + QScenePropertyChangePrivate(); virtual ~QScenePropertyChangePrivate(); static void *operator new(size_t size); diff --git a/src/core/resources/qframeallocator.cpp b/src/core/resources/qframeallocator.cpp index ead5a790e..c62e7ad0d 100644 --- a/src/core/resources/qframeallocator.cpp +++ b/src/core/resources/qframeallocator.cpp @@ -53,13 +53,12 @@ namespace Qt3D { \class Qt3D::QFrameAllocatorPrivate \internal */ -QFrameAllocatorPrivate::QFrameAllocatorPrivate(QFrameAllocator *qq) - : q_ptr(qq) +QFrameAllocatorPrivate::QFrameAllocatorPrivate() { } QFrameAllocator::QFrameAllocator(uint maxObjectSize, uint alignment, uint pageSize) - : d_ptr(new QFrameAllocatorPrivate(this)) + : d_ptr(new QFrameAllocatorPrivate) { Q_ASSERT(alignment && pageSize && pageSize < UCHAR_MAX); Q_D(QFrameAllocator); diff --git a/src/core/resources/qframeallocator_p.h b/src/core/resources/qframeallocator_p.h index dbf68ea63..990066138 100644 --- a/src/core/resources/qframeallocator_p.h +++ b/src/core/resources/qframeallocator_p.h @@ -91,7 +91,7 @@ private: class QFrameAllocatorPrivate { public: - QFrameAllocatorPrivate(QFrameAllocator *qq); + QFrameAllocatorPrivate(); inline void *allocateAtChunk(uint allocatorIndex) { @@ -108,9 +108,6 @@ public: return (targetSize + m_alignment - 1) / m_alignment - 1; } - Q_DECLARE_PUBLIC(QFrameAllocator) - QFrameAllocator *q_ptr; - uint m_maxObjectSize; uint m_alignment; QVector m_allocatorPool; diff --git a/src/render/io/qattribute.cpp b/src/render/io/qattribute.cpp index 821a28f1c..c1329fc8c 100644 --- a/src/render/io/qattribute.cpp +++ b/src/render/io/qattribute.cpp @@ -50,13 +50,13 @@ namespace Qt3D { class Qt3D::AttributePrivate \internal */ -AttributePrivate::AttributePrivate(Attribute *qq) - : QAbstractAttributePrivate(qq) +AttributePrivate::AttributePrivate() + : QAbstractAttributePrivate() { } Attribute::Attribute(QAbstractBufferPtr buf, int type, int count, int offset, int stride) - : QAbstractAttribute(*new AttributePrivate(this), buf, type, count, offset, stride) + : QAbstractAttribute(*new AttributePrivate, buf, type, count, offset, stride) { } diff --git a/src/render/io/qattribute_p.h b/src/render/io/qattribute_p.h index 710763d8e..82b2278d6 100644 --- a/src/render/io/qattribute_p.h +++ b/src/render/io/qattribute_p.h @@ -49,9 +49,7 @@ class Attribute; class QT3DRENDERERSHARED_EXPORT AttributePrivate : public QAbstractAttributePrivate { public: - AttributePrivate(Attribute *qq); - - Q_DECLARE_PUBLIC(Attribute) + AttributePrivate(); }; } // Qt3D diff --git a/src/render/io/qbuffer.cpp b/src/render/io/qbuffer.cpp index 209f87aca..54ab6d75d 100644 --- a/src/render/io/qbuffer.cpp +++ b/src/render/io/qbuffer.cpp @@ -46,13 +46,13 @@ namespace Qt3D { \class Qt3D::BufferPrivate \internal */ -BufferPrivate::BufferPrivate(Buffer *qq) - : QAbstractBufferPrivate(qq) +BufferPrivate::BufferPrivate() + : QAbstractBufferPrivate() { } Buffer::Buffer(QOpenGLBuffer::Type ty) - : QAbstractBuffer(*new BufferPrivate(this)) + : QAbstractBuffer(*new BufferPrivate) { Q_D(Buffer); d->m_type = ty; diff --git a/src/render/io/qbuffer_p.h b/src/render/io/qbuffer_p.h index 5b9e9ea3f..c86bdcd5c 100644 --- a/src/render/io/qbuffer_p.h +++ b/src/render/io/qbuffer_p.h @@ -50,9 +50,8 @@ class Buffer; class QT3DRENDERERSHARED_EXPORT BufferPrivate : public QAbstractBufferPrivate { public: - BufferPrivate(Buffer *qq); + BufferPrivate(); - Q_DECLARE_PUBLIC(Buffer) QOpenGLBuffer::Type m_type; QOpenGLBuffer::UsagePattern m_usage; }; diff --git a/src/render/io/qmeshdata.cpp b/src/render/io/qmeshdata.cpp index f53d4c8af..ddb2b00d8 100644 --- a/src/render/io/qmeshdata.cpp +++ b/src/render/io/qmeshdata.cpp @@ -48,15 +48,14 @@ namespace Qt3D { \class Qt3D::QMeshDataPrivate \internal */ -QMeshDataPrivate::QMeshDataPrivate(QMeshData *qq) - : q_ptr(qq) - , m_verticesPerPatch(0) +QMeshDataPrivate::QMeshDataPrivate() + : m_verticesPerPatch(0) , m_primitiveType(0) { } QMeshData::QMeshData(PrimitiveType primitiveType) - : d_ptr(new QMeshDataPrivate(this)) + : d_ptr(new QMeshDataPrivate) { setPrimitiveType(primitiveType); } diff --git a/src/render/io/qmeshdata_p.h b/src/render/io/qmeshdata_p.h index acb0fb872..19bb89963 100644 --- a/src/render/io/qmeshdata_p.h +++ b/src/render/io/qmeshdata_p.h @@ -47,7 +47,6 @@ QT_BEGIN_NAMESPACE namespace Qt3D { -class QMeshData; class QAbstractAttribute; class QAbstractBuffer; @@ -56,10 +55,7 @@ typedef QSharedPointer QAbstractAttributePtr; class QMeshDataPrivate { public: - QMeshDataPrivate(QMeshData *qq); - - Q_DECLARE_PUBLIC(QMeshData) - QMeshData *q_ptr; + QMeshDataPrivate(); QStringList m_attributesNames; QVector m_attributes; -- cgit v1.2.3