diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2016-05-14 08:52:45 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-05-19 07:03:19 +0000 |
commit | 6f6207fadc1a334d1aed98f840a0d074acf18d06 (patch) | |
tree | 083bf49b4d6bc999f099b3c1e2897cb23cb89887 /src/extras | |
parent | 72f2c87d15c76cc861699aea536e01bc8d56c8f2 (diff) |
De-inline dtors of public polymorphic classes
By making the destructor (usually the first non-inline, non-pure,
virtual function, and therefore the trigger for most compilers to
emit the vtable and type_info structures for the class in that TU)
out-of-line, vtables and, more importantly, type_info structures for
the class are pinned to a single TU. This prevents false negative
dynamic_cast and catch evaluation.
It also allows to add code to them later, if necessary.
Change-Id: I0da301cd788162abba6cdbbb21910090a22adb9a
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/extras')
28 files changed, 96 insertions, 0 deletions
diff --git a/src/extras/defaults/qgoochmaterial.cpp b/src/extras/defaults/qgoochmaterial.cpp index a6f533745..6b6ea131a 100644 --- a/src/extras/defaults/qgoochmaterial.cpp +++ b/src/extras/defaults/qgoochmaterial.cpp @@ -224,6 +224,11 @@ QGoochMaterial::QGoochMaterial(QNode *parent) d->init(); } +/*! \internal */ +QGoochMaterial::~QGoochMaterial() +{ +} + QGoochMaterial::QGoochMaterial(QGoochMaterialPrivate &dd, QNode *parent) : QMaterial(dd, parent) { diff --git a/src/extras/defaults/qgoochmaterial.h b/src/extras/defaults/qgoochmaterial.h index e3a863433..232257513 100644 --- a/src/extras/defaults/qgoochmaterial.h +++ b/src/extras/defaults/qgoochmaterial.h @@ -63,6 +63,8 @@ class QT3DEXTRASSHARED_EXPORT QGoochMaterial : public Qt3DRender::QMaterial public: explicit QGoochMaterial(Qt3DCore::QNode *parent = nullptr); + ~QGoochMaterial(); + QColor diffuse() const; QColor specular() const; QColor cool() const; diff --git a/src/extras/defaults/qskyboxentity.cpp b/src/extras/defaults/qskyboxentity.cpp index 30e42a7a6..2e755f385 100644 --- a/src/extras/defaults/qskyboxentity.cpp +++ b/src/extras/defaults/qskyboxentity.cpp @@ -218,6 +218,11 @@ QSkyboxEntity::QSkyboxEntity(QNode *parent) d_func()->init(); } +/*! \internal */ +QSkyboxEntity::~QSkyboxEntity() +{ +} + /*! * Sets the base name to \a baseName. */ diff --git a/src/extras/defaults/qskyboxentity.h b/src/extras/defaults/qskyboxentity.h index 4295c2332..8cb279e1a 100644 --- a/src/extras/defaults/qskyboxentity.h +++ b/src/extras/defaults/qskyboxentity.h @@ -54,6 +54,7 @@ class QT3DEXTRASSHARED_EXPORT QSkyboxEntity : public Qt3DCore::QEntity Q_OBJECT public: explicit QSkyboxEntity(Qt3DCore::QNode *parent = nullptr); + ~QSkyboxEntity(); void setBaseName(const QString &path); QString baseName() const; diff --git a/src/extras/geometries/qconegeometry.cpp b/src/extras/geometries/qconegeometry.cpp index 64cc569e8..7215c0797 100644 --- a/src/extras/geometries/qconegeometry.cpp +++ b/src/extras/geometries/qconegeometry.cpp @@ -415,6 +415,12 @@ QConeGeometry::QConeGeometry(QConeGeometryPrivate &dd, QNode *parent) d->init(); } + +/*! \internal */ +QConeGeometry::~QConeGeometry() +{ +} + void QConeGeometry::updateVertices() { Q_D(QConeGeometry); diff --git a/src/extras/geometries/qconegeometry.h b/src/extras/geometries/qconegeometry.h index c581da59a..4f1dc944a 100644 --- a/src/extras/geometries/qconegeometry.h +++ b/src/extras/geometries/qconegeometry.h @@ -70,6 +70,7 @@ class QT3DEXTRASSHARED_EXPORT QConeGeometry : public Qt3DRender::QGeometry public: explicit QConeGeometry(QNode *parent = nullptr); + ~QConeGeometry(); void updateVertices(); void updateIndices(); diff --git a/src/extras/geometries/qconemesh.cpp b/src/extras/geometries/qconemesh.cpp index 6e9415895..e2f43b16d 100644 --- a/src/extras/geometries/qconemesh.cpp +++ b/src/extras/geometries/qconemesh.cpp @@ -68,6 +68,11 @@ QConeMesh::QConeMesh(QNode *parent) QGeometryRenderer::setGeometry(geometry); } +/*! \internal */ +QConeMesh::~QConeMesh() +{ +} + void QConeMesh::setHasTopEndcap(bool hasTopEndcap) { static_cast<QConeGeometry *>(geometry())->setHasTopEndcap(hasTopEndcap); diff --git a/src/extras/geometries/qconemesh.h b/src/extras/geometries/qconemesh.h index 0dc546ea7..c32070e5c 100644 --- a/src/extras/geometries/qconemesh.h +++ b/src/extras/geometries/qconemesh.h @@ -59,6 +59,7 @@ class QT3DEXTRASSHARED_EXPORT QConeMesh : public Qt3DRender::QGeometryRenderer Q_PROPERTY(float length READ length WRITE setLength NOTIFY lengthChanged) public: explicit QConeMesh(Qt3DCore::QNode *parent = nullptr); + ~QConeMesh(); int rings() const; int slices() const; diff --git a/src/extras/geometries/qcuboidgeometry.cpp b/src/extras/geometries/qcuboidgeometry.cpp index dc76edbf6..21944c529 100644 --- a/src/extras/geometries/qcuboidgeometry.cpp +++ b/src/extras/geometries/qcuboidgeometry.cpp @@ -595,6 +595,13 @@ QCuboidGeometry::QCuboidGeometry(QCuboidGeometryPrivate &dd, QNode *parent) } /*! + * \internal + */ +QCuboidGeometry::~QCuboidGeometry() +{ +} + +/*! * Updates indices based on mesh resolutions. */ void QCuboidGeometry::updateIndices() diff --git a/src/extras/geometries/qcuboidgeometry.h b/src/extras/geometries/qcuboidgeometry.h index 1bf7905ea..fad5dcf9f 100644 --- a/src/extras/geometries/qcuboidgeometry.h +++ b/src/extras/geometries/qcuboidgeometry.h @@ -73,6 +73,7 @@ class QT3DEXTRASSHARED_EXPORT QCuboidGeometry : public Qt3DRender::QGeometry public: explicit QCuboidGeometry(QNode *parent = nullptr); + ~QCuboidGeometry(); void updateIndices(); void updateVertices(); diff --git a/src/extras/geometries/qcuboidmesh.cpp b/src/extras/geometries/qcuboidmesh.cpp index ac5b164c6..004fca472 100644 --- a/src/extras/geometries/qcuboidmesh.cpp +++ b/src/extras/geometries/qcuboidmesh.cpp @@ -112,6 +112,11 @@ QCuboidMesh::QCuboidMesh(QNode *parent) QGeometryRenderer::setGeometry(geometry); } +/*! \internal */ +QCuboidMesh::~QCuboidMesh() +{ +} + void QCuboidMesh::setXExtent(float xExtent) { static_cast<QCuboidGeometry *>(geometry())->setXExtent(xExtent); diff --git a/src/extras/geometries/qcuboidmesh.h b/src/extras/geometries/qcuboidmesh.h index 93d386d2c..f709703c5 100644 --- a/src/extras/geometries/qcuboidmesh.h +++ b/src/extras/geometries/qcuboidmesh.h @@ -61,6 +61,7 @@ class QT3DEXTRASSHARED_EXPORT QCuboidMesh : public Qt3DRender::QGeometryRenderer public: explicit QCuboidMesh(Qt3DCore::QNode *parent = nullptr); + ~QCuboidMesh(); float xExtent() const; float yExtent() const; diff --git a/src/extras/geometries/qcylindergeometry.cpp b/src/extras/geometries/qcylindergeometry.cpp index 3231507f7..2cbe1939c 100644 --- a/src/extras/geometries/qcylindergeometry.cpp +++ b/src/extras/geometries/qcylindergeometry.cpp @@ -418,6 +418,13 @@ QCylinderGeometry::QCylinderGeometry(QCylinderGeometryPrivate &dd, QNode *parent } /*! + * \internal + */ +QCylinderGeometry::~QCylinderGeometry() +{ +} + +/*! * Updates the vertices based on rings and slices. */ void QCylinderGeometry::updateVertices() diff --git a/src/extras/geometries/qcylindergeometry.h b/src/extras/geometries/qcylindergeometry.h index 9be49c67c..add4a7d96 100644 --- a/src/extras/geometries/qcylindergeometry.h +++ b/src/extras/geometries/qcylindergeometry.h @@ -68,6 +68,7 @@ class QT3DEXTRASSHARED_EXPORT QCylinderGeometry : public Qt3DRender::QGeometry public: explicit QCylinderGeometry(QNode *parent = nullptr); + ~QCylinderGeometry(); void updateVertices(); void updateIndices(); diff --git a/src/extras/geometries/qcylindermesh.cpp b/src/extras/geometries/qcylindermesh.cpp index 5a4e2c6a0..ef405cb6e 100644 --- a/src/extras/geometries/qcylindermesh.cpp +++ b/src/extras/geometries/qcylindermesh.cpp @@ -111,6 +111,11 @@ QCylinderMesh::QCylinderMesh(QNode *parent) QGeometryRenderer::setGeometry(geometry); } +/*! \internal */ +QCylinderMesh::~QCylinderMesh() +{ +} + void QCylinderMesh::setRings(int rings) { static_cast<QCylinderGeometry *>(geometry())->setRings(rings); diff --git a/src/extras/geometries/qcylindermesh.h b/src/extras/geometries/qcylindermesh.h index 0da4b9555..3083ed849 100644 --- a/src/extras/geometries/qcylindermesh.h +++ b/src/extras/geometries/qcylindermesh.h @@ -57,6 +57,7 @@ class QT3DEXTRASSHARED_EXPORT QCylinderMesh : public Qt3DRender::QGeometryRender Q_PROPERTY(float length READ length WRITE setLength NOTIFY lengthChanged) public: explicit QCylinderMesh(Qt3DCore::QNode *parent = nullptr); + ~QCylinderMesh(); int rings() const; int slices() const; diff --git a/src/extras/geometries/qplanegeometry.cpp b/src/extras/geometries/qplanegeometry.cpp index 29ec8256e..59ed9ee21 100644 --- a/src/extras/geometries/qplanegeometry.cpp +++ b/src/extras/geometries/qplanegeometry.cpp @@ -288,6 +288,13 @@ QPlaneGeometry::QPlaneGeometry(QPlaneGeometryPrivate &dd, QNode *parent) } /*! + * \internal + */ +QPlaneGeometry::~QPlaneGeometry() +{ +} + +/*! * Updates vertices based on resolution. */ void QPlaneGeometry::updateVertices() diff --git a/src/extras/geometries/qplanegeometry.h b/src/extras/geometries/qplanegeometry.h index d082269c3..7ec5cba43 100644 --- a/src/extras/geometries/qplanegeometry.h +++ b/src/extras/geometries/qplanegeometry.h @@ -70,6 +70,7 @@ class QT3DEXTRASSHARED_EXPORT QPlaneGeometry : public Qt3DRender::QGeometry public: explicit QPlaneGeometry(QNode *parent = nullptr); + ~QPlaneGeometry(); void updateVertices(); void updateIndices(); diff --git a/src/extras/geometries/qplanemesh.cpp b/src/extras/geometries/qplanemesh.cpp index 34bdbc5ee..f9d1a105b 100644 --- a/src/extras/geometries/qplanemesh.cpp +++ b/src/extras/geometries/qplanemesh.cpp @@ -91,6 +91,11 @@ QPlaneMesh::QPlaneMesh(QNode *parent) QGeometryRenderer::setGeometry(geometry); } +/*! \internal */ +QPlaneMesh::~QPlaneMesh() +{ +} + void QPlaneMesh::setWidth(float width) { static_cast<QPlaneGeometry *>(geometry())->setWidth(width); diff --git a/src/extras/geometries/qplanemesh.h b/src/extras/geometries/qplanemesh.h index b308908e8..b1505db17 100644 --- a/src/extras/geometries/qplanemesh.h +++ b/src/extras/geometries/qplanemesh.h @@ -57,6 +57,7 @@ class QT3DEXTRASSHARED_EXPORT QPlaneMesh : public Qt3DRender::QGeometryRenderer public: explicit QPlaneMesh(Qt3DCore::QNode *parent = nullptr); + ~QPlaneMesh(); float width() const; float height() const; diff --git a/src/extras/geometries/qspheregeometry.cpp b/src/extras/geometries/qspheregeometry.cpp index 38af69fe5..0c582f441 100644 --- a/src/extras/geometries/qspheregeometry.cpp +++ b/src/extras/geometries/qspheregeometry.cpp @@ -401,6 +401,13 @@ QSphereGeometry::QSphereGeometry(QSphereGeometryPrivate &dd, QNode *parent) } /*! + * \internal + */ +QSphereGeometry::~QSphereGeometry() +{ +} + +/*! * Updates vertices based on rings and slices. */ void QSphereGeometry::updateVertices() diff --git a/src/extras/geometries/qspheregeometry.h b/src/extras/geometries/qspheregeometry.h index 5deb8a171..d657c0c67 100644 --- a/src/extras/geometries/qspheregeometry.h +++ b/src/extras/geometries/qspheregeometry.h @@ -70,6 +70,7 @@ class QT3DEXTRASSHARED_EXPORT QSphereGeometry : public Qt3DRender::QGeometry public: explicit QSphereGeometry(QNode *parent = nullptr); + ~QSphereGeometry(); void updateVertices(); void updateIndices(); diff --git a/src/extras/geometries/qspheremesh.cpp b/src/extras/geometries/qspheremesh.cpp index a17145181..205f6437f 100644 --- a/src/extras/geometries/qspheremesh.cpp +++ b/src/extras/geometries/qspheremesh.cpp @@ -99,6 +99,11 @@ QSphereMesh::QSphereMesh(QNode *parent) QGeometryRenderer::setGeometry(geometry); } +/*! \internal */ +QSphereMesh::~QSphereMesh() +{ +} + void QSphereMesh::setRings(int rings) { static_cast<QSphereGeometry *>(geometry())->setRings(rings); diff --git a/src/extras/geometries/qspheremesh.h b/src/extras/geometries/qspheremesh.h index 5880f7188..58e77dcab 100644 --- a/src/extras/geometries/qspheremesh.h +++ b/src/extras/geometries/qspheremesh.h @@ -59,6 +59,7 @@ class QT3DEXTRASSHARED_EXPORT QSphereMesh : public Qt3DRender::QGeometryRenderer public: explicit QSphereMesh(Qt3DCore::QNode *parent = nullptr); + ~QSphereMesh(); int rings() const; int slices() const; diff --git a/src/extras/geometries/qtorusgeometry.cpp b/src/extras/geometries/qtorusgeometry.cpp index f62700755..5ca8c3ce1 100644 --- a/src/extras/geometries/qtorusgeometry.cpp +++ b/src/extras/geometries/qtorusgeometry.cpp @@ -344,6 +344,13 @@ QTorusGeometry::QTorusGeometry(QTorusGeometryPrivate &dd, QNode *parent) } /*! + * \internal + */ +QTorusGeometry::~QTorusGeometry() +{ +} + +/*! * Updates vertices based on rings and slices. */ void QTorusGeometry::updateVertices() diff --git a/src/extras/geometries/qtorusgeometry.h b/src/extras/geometries/qtorusgeometry.h index 89e205a3f..ebde32bd8 100644 --- a/src/extras/geometries/qtorusgeometry.h +++ b/src/extras/geometries/qtorusgeometry.h @@ -69,6 +69,7 @@ class QT3DEXTRASSHARED_EXPORT QTorusGeometry : public Qt3DRender::QGeometry public: explicit QTorusGeometry(QNode *parent = nullptr); + ~QTorusGeometry(); void updateVertices(); void updateIndices(); diff --git a/src/extras/geometries/qtorusmesh.cpp b/src/extras/geometries/qtorusmesh.cpp index 67f4cffa7..e3b5b61d0 100644 --- a/src/extras/geometries/qtorusmesh.cpp +++ b/src/extras/geometries/qtorusmesh.cpp @@ -104,6 +104,11 @@ QTorusMesh::QTorusMesh(QNode *parent) QGeometryRenderer::setGeometry(geometry); } +/*! \internal */ +QTorusMesh::~QTorusMesh() +{ +} + void QTorusMesh::setRings(int rings) { static_cast<QTorusGeometry *>(geometry())->setRings(rings); diff --git a/src/extras/geometries/qtorusmesh.h b/src/extras/geometries/qtorusmesh.h index f75ec913a..69ad00efe 100644 --- a/src/extras/geometries/qtorusmesh.h +++ b/src/extras/geometries/qtorusmesh.h @@ -56,6 +56,7 @@ class QT3DEXTRASSHARED_EXPORT QTorusMesh : public Qt3DRender::QGeometryRenderer Q_PROPERTY(float minorRadius READ minorRadius WRITE setMinorRadius NOTIFY minorRadiusChanged) public: explicit QTorusMesh(Qt3DCore::QNode *parent = nullptr); + ~QTorusMesh(); int rings() const; int slices() const; |