From ff764ecacb4992db8b37f528fce448c4f0e07bfc Mon Sep 17 00:00:00 2001 From: Leonid Terenin Date: Wed, 6 Nov 2024 16:14:58 +0900 Subject: [PATCH 1/5] added virtual destructors --- 3rdparty/convexdecomposition/NvFloatMath.h | 3 +++ 3rdparty/convexdecomposition/NvFloatMath.inl | 1 + 3rdparty/convexdecomposition/NvMeshIslandGeneration.h | 1 + 3rdparty/convexdecomposition/NvRemoveTjunctions.h | 1 + 3rdparty/convexdecomposition/NvStanHull.h | 1 + 3rdparty/convexdecomposition/NvThreadConfig.h | 3 +++ 3rdparty/convexdecomposition/wavefront.cpp | 2 ++ plugins/ikfastsolvers/jacobianinverse.h | 1 + plugins/rmanipulation/taskmanipulation.cpp | 2 ++ plugins/rplanners/ParabolicPathSmooth/DynamicPath.h | 3 +++ plugins/rplanners/piecewisepolynomials/cubicinterpolator.h | 2 +- plugins/rplanners/piecewisepolynomials/interpolatorbase.h | 2 +- plugins/rplanners/piecewisepolynomials/polynomialtrajectory.h | 2 +- plugins/rplanners/rampoptimizer/feasibilitychecker.h | 2 ++ plugins/rplanners/randomized-astar.cpp | 1 + plugins/rplanners/rplanners.h | 2 ++ python/ikfast.h | 1 + 17 files changed, 27 insertions(+), 3 deletions(-) diff --git a/3rdparty/convexdecomposition/NvFloatMath.h b/3rdparty/convexdecomposition/NvFloatMath.h index 5cd17cd72e..b4aee616b2 100644 --- a/3rdparty/convexdecomposition/NvFloatMath.h +++ b/3rdparty/convexdecomposition/NvFloatMath.h @@ -422,6 +422,7 @@ NxF64 fm_computeMeshVolume(const NxF64 *vertices,NxU32 tcount,const NxU32 *indic class fm_VertexIndex { public: + virtual ~fm_VertexIndex() {} virtual NxU32 getIndex(const NxF32 pos[3],bool &newPos) = 0; // get welded index for this NxF32 vector[3] virtual NxU32 getIndex(const NxF64 pos[3],bool &newPos) = 0; // get welded index for this NxF64 vector[3] virtual const NxF32 * getVerticesFloat(void) const = 0; @@ -482,6 +483,7 @@ void fm_releaseLineSweep(fm_LineSweep *sweep); class fm_Triangulate { public: + virtual ~fm_Triangulate() {} virtual const NxF64 * triangulate3d(NxU32 pcount, const NxF64 *points, NxU32 vstride, @@ -555,6 +557,7 @@ void fm_OBBtoAABB(const NxF32 obmin[3],const NxF32 obmax[3],const NxF32 matri class fm_Tesselate { public: + virtual ~fm_Tesselate() {} virtual const NxU32 * tesselate(fm_VertexIndex *vindex,NxU32 tcount,const NxU32 *indices,NxF32 longEdge,NxU32 maxDepth,NxU32 &outcount) = 0; }; diff --git a/3rdparty/convexdecomposition/NvFloatMath.inl b/3rdparty/convexdecomposition/NvFloatMath.inl index e98b2ca8f1..02d15d70d0 100644 --- a/3rdparty/convexdecomposition/NvFloatMath.inl +++ b/3rdparty/convexdecomposition/NvFloatMath.inl @@ -2279,6 +2279,7 @@ public: class KdTreeInterface { public: + virtual ~KdTreeInterface() {} virtual const NxF64 * getPositionDouble(NxU32 index) const = 0; virtual const NxF32 * getPositionFloat(NxU32 index) const = 0; }; diff --git a/3rdparty/convexdecomposition/NvMeshIslandGeneration.h b/3rdparty/convexdecomposition/NvMeshIslandGeneration.h index 4a32b41ac4..27c752e850 100644 --- a/3rdparty/convexdecomposition/NvMeshIslandGeneration.h +++ b/3rdparty/convexdecomposition/NvMeshIslandGeneration.h @@ -65,6 +65,7 @@ namespace CONVEX_DECOMPOSITION class MeshIslandGeneration { public: + virtual ~MeshIslandGeneration() {} virtual NxU32 islandGenerate(NxU32 tcount,const NxU32 *indices,const NxF32 *vertices) = 0; virtual NxU32 islandGenerate(NxU32 tcount,const NxU32 *indices,const NxF64 *vertices) = 0; diff --git a/3rdparty/convexdecomposition/NvRemoveTjunctions.h b/3rdparty/convexdecomposition/NvRemoveTjunctions.h index a1272be0c8..77f5717bbe 100644 --- a/3rdparty/convexdecomposition/NvRemoveTjunctions.h +++ b/3rdparty/convexdecomposition/NvRemoveTjunctions.h @@ -96,6 +96,7 @@ class RemoveTjunctionsDesc class RemoveTjunctions { public: + virtual ~RemoveTjunctions() {} virtual NxU32 removeTjunctions(RemoveTjunctionsDesc &desc) =0; // returns number of triangles output and the descriptor is filled with the appropriate results. diff --git a/3rdparty/convexdecomposition/NvStanHull.h b/3rdparty/convexdecomposition/NvStanHull.h index b6af1bf541..304317f784 100644 --- a/3rdparty/convexdecomposition/NvStanHull.h +++ b/3rdparty/convexdecomposition/NvStanHull.h @@ -167,6 +167,7 @@ class ConvexHullVertex class ConvexHullTriangleInterface { public: + virtual ~ConvexHullTriangleInterface() {} virtual void ConvexHullTriangle(const ConvexHullVertex &v1,const ConvexHullVertex &v2,const ConvexHullVertex &v3) = 0; }; diff --git a/3rdparty/convexdecomposition/NvThreadConfig.h b/3rdparty/convexdecomposition/NvThreadConfig.h index 0a6314a2c5..c919751117 100644 --- a/3rdparty/convexdecomposition/NvThreadConfig.h +++ b/3rdparty/convexdecomposition/NvThreadConfig.h @@ -79,6 +79,7 @@ NxI32 tc_interlockedCompareExchange(void *dest, const NxI32 exchange1, cons class ThreadMutex { public: + virtual ~ThreadMutex() {} virtual void lock(void) = 0; virtual void unlock(void) = 0; virtual bool tryLock(void) = 0; @@ -91,6 +92,7 @@ void tc_releaseThreadMutex(ThreadMutex *tm); class ThreadInterface { public: + virtual ~ThreadInterface() {} virtual void threadMain(void) = 0; }; @@ -105,6 +107,7 @@ void tc_releaseThread(Thread *t); class ThreadEvent { public: + virtual ~ThreadEvent() {} virtual void setEvent(void) = 0; // signal the event virtual void resetEvent(void) = 0; virtual void waitForSingleObject(NxU32 ms) = 0; diff --git a/3rdparty/convexdecomposition/wavefront.cpp b/3rdparty/convexdecomposition/wavefront.cpp index c0ffb214de..0e0a18799d 100644 --- a/3rdparty/convexdecomposition/wavefront.cpp +++ b/3rdparty/convexdecomposition/wavefront.cpp @@ -79,6 +79,7 @@ namespace WAVEFRONT class InPlaceParserInterface { public: + virtual ~InPlaceParserInterface() {} virtual NxI32 ParseLine(NxI32 lineno,NxI32 argc,const char **argv) =0; // return TRUE to continue parsing, return FALSE to abort parsing process }; @@ -540,6 +541,7 @@ class GeometryVertex class GeometryInterface { public: + virtual ~GeometryInterface() {} virtual void NodeTriangle(const GeometryVertex *v1,const GeometryVertex *v2,const GeometryVertex *v3, bool textured) { diff --git a/plugins/ikfastsolvers/jacobianinverse.h b/plugins/ikfastsolvers/jacobianinverse.h index 9425a99de0..f5d7aedc7f 100644 --- a/plugins/ikfastsolvers/jacobianinverse.h +++ b/plugins/ikfastsolvers/jacobianinverse.h @@ -53,6 +53,7 @@ class JacobianInverseSolver _lastiter = -1; _nMaxIterations = 100; } + virtual ~JacobianInverseSolver() {} /// \brief initializes with the manipulator, but doesn't store it! /// diff --git a/plugins/rmanipulation/taskmanipulation.cpp b/plugins/rmanipulation/taskmanipulation.cpp index 64a2d06c82..0f1786f508 100644 --- a/plugins/rmanipulation/taskmanipulation.cpp +++ b/plugins/rmanipulation/taskmanipulation.cpp @@ -238,6 +238,8 @@ Task-based manipulation planning involving target objects. A lot of the algorith *it *= *it; } } + virtual ~ActiveDistMetric() {} + virtual dReal Eval(const std::vector& c0, const std::vector& c1) { dReal out = 0; diff --git a/plugins/rplanners/ParabolicPathSmooth/DynamicPath.h b/plugins/rplanners/ParabolicPathSmooth/DynamicPath.h index 687e6db71c..419e0151e1 100644 --- a/plugins/rplanners/ParabolicPathSmooth/DynamicPath.h +++ b/plugins/rplanners/ParabolicPathSmooth/DynamicPath.h @@ -108,6 +108,8 @@ class RampFeasibilityChecker RampFeasibilityChecker(FeasibilityCheckerBase* feas); RampFeasibilityChecker(FeasibilityCheckerBase* feas,DistanceCheckerBase* distance,int maxiters); + virtual ~RampFeasibilityChecker() {} + /// \brief checks constraints given options /// /// \return if non-zero then failed. The return code gives the cause of the failure. \see OpenRAVE::ConstraintFilterOptions enum. @@ -132,6 +134,7 @@ class RampFeasibilityChecker class RandomNumberGeneratorBase { public: + virtual ~RandomNumberGeneratorBase() {} virtual Real Rand() { return ::ParabolicRampInternal::Rand(); } diff --git a/plugins/rplanners/piecewisepolynomials/cubicinterpolator.h b/plugins/rplanners/piecewisepolynomials/cubicinterpolator.h index ecb2b8a9a4..d45e3cdc98 100644 --- a/plugins/rplanners/piecewisepolynomials/cubicinterpolator.h +++ b/plugins/rplanners/piecewisepolynomials/cubicinterpolator.h @@ -26,7 +26,7 @@ class CubicInterpolator : public InterpolatorBase { /* */ CubicInterpolator(size_t ndof, int envid=0); - ~CubicInterpolator() + virtual ~CubicInterpolator() { } diff --git a/plugins/rplanners/piecewisepolynomials/interpolatorbase.h b/plugins/rplanners/piecewisepolynomials/interpolatorbase.h index 8dfe5e2e7b..7addfa25f1 100644 --- a/plugins/rplanners/piecewisepolynomials/interpolatorbase.h +++ b/plugins/rplanners/piecewisepolynomials/interpolatorbase.h @@ -32,7 +32,7 @@ class InterpolatorBase { { } InterpolatorBase(size_t ndof, int envid=0); - ~InterpolatorBase() + virtual ~InterpolatorBase() { } diff --git a/plugins/rplanners/piecewisepolynomials/polynomialtrajectory.h b/plugins/rplanners/piecewisepolynomials/polynomialtrajectory.h index 029af2c6bf..7c208a0588 100644 --- a/plugins/rplanners/piecewisepolynomials/polynomialtrajectory.h +++ b/plugins/rplanners/piecewisepolynomials/polynomialtrajectory.h @@ -52,7 +52,7 @@ class Polynomial { { }; Polynomial(const dReal T, const std::vector& c); - ~Polynomial() + virtual ~Polynomial() { } diff --git a/plugins/rplanners/rampoptimizer/feasibilitychecker.h b/plugins/rplanners/rampoptimizer/feasibilitychecker.h index 1f8705e55c..007c7565a0 100644 --- a/plugins/rplanners/rampoptimizer/feasibilitychecker.h +++ b/plugins/rplanners/rampoptimizer/feasibilitychecker.h @@ -80,6 +80,7 @@ class RampNDFeasibilityChecker { public: RampNDFeasibilityChecker(FeasibilityCheckerBase* feas); RampNDFeasibilityChecker(FeasibilityCheckerBase* feas, DistanceCheckerBase* dist, int maxiter); + virtual ~RampNDFeasibilityChecker() {} virtual int Check(const std::vector& rampsndVect, int options=0xffff); virtual CheckReturn Check2(const RampND& rampnd, int options, std::vector& rampsndVectOut) @@ -103,6 +104,7 @@ class RampNDFeasibilityChecker { class RandomNumberGeneratorBase { public: + virtual ~RandomNumberGeneratorBase() {} virtual dReal Rand() { return ::OpenRAVE::RampOptimizerInternal::Rand(); diff --git a/plugins/rplanners/randomized-astar.cpp b/plugins/rplanners/randomized-astar.cpp index a06119fc55..58d6ca7864 100644 --- a/plugins/rplanners/randomized-astar.cpp +++ b/plugins/rplanners/randomized-astar.cpp @@ -22,6 +22,7 @@ class RandomizedAStarPlanner : public PlannerBase public: SimpleCostMetric(RobotBasePtr robot) { } + virtual ~SimpleCostMetric() {} virtual float Eval(const vector& pConfiguration) { return 1; } diff --git a/plugins/rplanners/rplanners.h b/plugins/rplanners/rplanners.h index 58429ba3ca..66af51ebdf 100644 --- a/plugins/rplanners/rplanners.h +++ b/plugins/rplanners/rplanners.h @@ -111,6 +111,8 @@ class SimpleNode : public NodeBase class SpatialTreeBase { public: + virtual ~SpatialTreeBase() {} + virtual void Init(boost::weak_ptr planner, int dof, boost::function&, const std::vector&)>& distmetricfn, dReal fStepLength, dReal maxdistance) = 0; /// inserts a node in the try diff --git a/python/ikfast.h b/python/ikfast.h index 6eae639f20..e780a10a3c 100644 --- a/python/ikfast.h +++ b/python/ikfast.h @@ -58,6 +58,7 @@ class IkSingleDOFSolutionBase IkSingleDOFSolutionBase() { indices.fill(0xFF); } + virtual ~IkSingleDOFSolutionBase() {} T fmul = 0.0, foffset = 0.0; ///< joint value is fmul*sol[freeind]+foffset signed char freeind = -1; ///< if >= 0, mimics another joint From 1ea7c768f5d9a250dba14b1cb3f7981f89ed86b9 Mon Sep 17 00:00:00 2001 From: Taiju Yamada Date: Mon, 15 Jun 2026 15:35:53 +0900 Subject: [PATCH 2/5] Change new destructors to default --- 3rdparty/convexdecomposition/NvFloatMath.h | 6 +++--- 3rdparty/convexdecomposition/NvFloatMath.inl | 2 +- 3rdparty/convexdecomposition/NvMeshIslandGeneration.h | 2 +- 3rdparty/convexdecomposition/NvRemoveTjunctions.h | 2 +- 3rdparty/convexdecomposition/NvStanHull.h | 2 +- 3rdparty/convexdecomposition/NvThreadConfig.h | 6 +++--- 3rdparty/convexdecomposition/wavefront.cpp | 4 ++-- plugins/ikfastsolvers/jacobianinverse.h | 2 +- plugins/rmanipulation/taskmanipulation.cpp | 2 +- plugins/rplanners/ParabolicPathSmooth/DynamicPath.h | 4 ++-- plugins/rplanners/rampoptimizer/feasibilitychecker.h | 4 ++-- plugins/rplanners/randomized-astar.cpp | 2 +- plugins/rplanners/rplanners.h | 2 +- .../include/openravepy/openravepy_environmentbase.h | 1 + python/bindings/include/openravepy/openravepy_jointinfo.h | 1 + python/bindings/include/openravepy/openravepy_kinbody.h | 1 + python/bindings/openravepy_global.cpp | 1 + 17 files changed, 24 insertions(+), 20 deletions(-) diff --git a/3rdparty/convexdecomposition/NvFloatMath.h b/3rdparty/convexdecomposition/NvFloatMath.h index b4aee616b2..3d70964bef 100644 --- a/3rdparty/convexdecomposition/NvFloatMath.h +++ b/3rdparty/convexdecomposition/NvFloatMath.h @@ -422,7 +422,7 @@ NxF64 fm_computeMeshVolume(const NxF64 *vertices,NxU32 tcount,const NxU32 *indic class fm_VertexIndex { public: - virtual ~fm_VertexIndex() {} + virtual ~fm_VertexIndex() = default; virtual NxU32 getIndex(const NxF32 pos[3],bool &newPos) = 0; // get welded index for this NxF32 vector[3] virtual NxU32 getIndex(const NxF64 pos[3],bool &newPos) = 0; // get welded index for this NxF64 vector[3] virtual const NxF32 * getVerticesFloat(void) const = 0; @@ -483,7 +483,7 @@ void fm_releaseLineSweep(fm_LineSweep *sweep); class fm_Triangulate { public: - virtual ~fm_Triangulate() {} + virtual ~fm_Triangulate() = default; virtual const NxF64 * triangulate3d(NxU32 pcount, const NxF64 *points, NxU32 vstride, @@ -557,7 +557,7 @@ void fm_OBBtoAABB(const NxF32 obmin[3],const NxF32 obmax[3],const NxF32 matri class fm_Tesselate { public: - virtual ~fm_Tesselate() {} + virtual ~fm_Tesselate() = default; virtual const NxU32 * tesselate(fm_VertexIndex *vindex,NxU32 tcount,const NxU32 *indices,NxF32 longEdge,NxU32 maxDepth,NxU32 &outcount) = 0; }; diff --git a/3rdparty/convexdecomposition/NvFloatMath.inl b/3rdparty/convexdecomposition/NvFloatMath.inl index 02d15d70d0..d5baa2a5e0 100644 --- a/3rdparty/convexdecomposition/NvFloatMath.inl +++ b/3rdparty/convexdecomposition/NvFloatMath.inl @@ -2279,7 +2279,7 @@ public: class KdTreeInterface { public: - virtual ~KdTreeInterface() {} + virtual ~KdTreeInterface() = default; virtual const NxF64 * getPositionDouble(NxU32 index) const = 0; virtual const NxF32 * getPositionFloat(NxU32 index) const = 0; }; diff --git a/3rdparty/convexdecomposition/NvMeshIslandGeneration.h b/3rdparty/convexdecomposition/NvMeshIslandGeneration.h index 27c752e850..bdbce06b60 100644 --- a/3rdparty/convexdecomposition/NvMeshIslandGeneration.h +++ b/3rdparty/convexdecomposition/NvMeshIslandGeneration.h @@ -65,7 +65,7 @@ namespace CONVEX_DECOMPOSITION class MeshIslandGeneration { public: - virtual ~MeshIslandGeneration() {} + virtual ~MeshIslandGeneration() = default; virtual NxU32 islandGenerate(NxU32 tcount,const NxU32 *indices,const NxF32 *vertices) = 0; virtual NxU32 islandGenerate(NxU32 tcount,const NxU32 *indices,const NxF64 *vertices) = 0; diff --git a/3rdparty/convexdecomposition/NvRemoveTjunctions.h b/3rdparty/convexdecomposition/NvRemoveTjunctions.h index 77f5717bbe..dc9c5d1c9c 100644 --- a/3rdparty/convexdecomposition/NvRemoveTjunctions.h +++ b/3rdparty/convexdecomposition/NvRemoveTjunctions.h @@ -96,7 +96,7 @@ class RemoveTjunctionsDesc class RemoveTjunctions { public: - virtual ~RemoveTjunctions() {} + virtual ~RemoveTjunctions() = default; virtual NxU32 removeTjunctions(RemoveTjunctionsDesc &desc) =0; // returns number of triangles output and the descriptor is filled with the appropriate results. diff --git a/3rdparty/convexdecomposition/NvStanHull.h b/3rdparty/convexdecomposition/NvStanHull.h index 304317f784..d4b26143b2 100644 --- a/3rdparty/convexdecomposition/NvStanHull.h +++ b/3rdparty/convexdecomposition/NvStanHull.h @@ -167,7 +167,7 @@ class ConvexHullVertex class ConvexHullTriangleInterface { public: - virtual ~ConvexHullTriangleInterface() {} + virtual ~ConvexHullTriangleInterface() = default; virtual void ConvexHullTriangle(const ConvexHullVertex &v1,const ConvexHullVertex &v2,const ConvexHullVertex &v3) = 0; }; diff --git a/3rdparty/convexdecomposition/NvThreadConfig.h b/3rdparty/convexdecomposition/NvThreadConfig.h index c919751117..563604c7f9 100644 --- a/3rdparty/convexdecomposition/NvThreadConfig.h +++ b/3rdparty/convexdecomposition/NvThreadConfig.h @@ -79,7 +79,7 @@ NxI32 tc_interlockedCompareExchange(void *dest, const NxI32 exchange1, cons class ThreadMutex { public: - virtual ~ThreadMutex() {} + virtual ~ThreadMutex() = default; virtual void lock(void) = 0; virtual void unlock(void) = 0; virtual bool tryLock(void) = 0; @@ -92,7 +92,7 @@ void tc_releaseThreadMutex(ThreadMutex *tm); class ThreadInterface { public: - virtual ~ThreadInterface() {} + virtual ~ThreadInterface() = default; virtual void threadMain(void) = 0; }; @@ -107,7 +107,7 @@ void tc_releaseThread(Thread *t); class ThreadEvent { public: - virtual ~ThreadEvent() {} + virtual ~ThreadEvent() = default; virtual void setEvent(void) = 0; // signal the event virtual void resetEvent(void) = 0; virtual void waitForSingleObject(NxU32 ms) = 0; diff --git a/3rdparty/convexdecomposition/wavefront.cpp b/3rdparty/convexdecomposition/wavefront.cpp index 0e0a18799d..5e371c0857 100644 --- a/3rdparty/convexdecomposition/wavefront.cpp +++ b/3rdparty/convexdecomposition/wavefront.cpp @@ -79,7 +79,7 @@ namespace WAVEFRONT class InPlaceParserInterface { public: - virtual ~InPlaceParserInterface() {} + virtual ~InPlaceParserInterface() = default; virtual NxI32 ParseLine(NxI32 lineno,NxI32 argc,const char **argv) =0; // return TRUE to continue parsing, return FALSE to abort parsing process }; @@ -541,7 +541,7 @@ class GeometryVertex class GeometryInterface { public: - virtual ~GeometryInterface() {} + virtual ~GeometryInterface() = default; virtual void NodeTriangle(const GeometryVertex *v1,const GeometryVertex *v2,const GeometryVertex *v3, bool textured) { diff --git a/plugins/ikfastsolvers/jacobianinverse.h b/plugins/ikfastsolvers/jacobianinverse.h index f5d7aedc7f..8a8e0cf259 100644 --- a/plugins/ikfastsolvers/jacobianinverse.h +++ b/plugins/ikfastsolvers/jacobianinverse.h @@ -53,7 +53,7 @@ class JacobianInverseSolver _lastiter = -1; _nMaxIterations = 100; } - virtual ~JacobianInverseSolver() {} + virtual ~JacobianInverseSolver() = default; /// \brief initializes with the manipulator, but doesn't store it! /// diff --git a/plugins/rmanipulation/taskmanipulation.cpp b/plugins/rmanipulation/taskmanipulation.cpp index 0f1786f508..80cbe01f60 100644 --- a/plugins/rmanipulation/taskmanipulation.cpp +++ b/plugins/rmanipulation/taskmanipulation.cpp @@ -238,7 +238,7 @@ Task-based manipulation planning involving target objects. A lot of the algorith *it *= *it; } } - virtual ~ActiveDistMetric() {} + virtual ~ActiveDistMetric() = default; virtual dReal Eval(const std::vector& c0, const std::vector& c1) { diff --git a/plugins/rplanners/ParabolicPathSmooth/DynamicPath.h b/plugins/rplanners/ParabolicPathSmooth/DynamicPath.h index 419e0151e1..884e5c6349 100644 --- a/plugins/rplanners/ParabolicPathSmooth/DynamicPath.h +++ b/plugins/rplanners/ParabolicPathSmooth/DynamicPath.h @@ -108,7 +108,7 @@ class RampFeasibilityChecker RampFeasibilityChecker(FeasibilityCheckerBase* feas); RampFeasibilityChecker(FeasibilityCheckerBase* feas,DistanceCheckerBase* distance,int maxiters); - virtual ~RampFeasibilityChecker() {} + virtual ~RampFeasibilityChecker() = default; /// \brief checks constraints given options /// @@ -134,7 +134,7 @@ class RampFeasibilityChecker class RandomNumberGeneratorBase { public: - virtual ~RandomNumberGeneratorBase() {} + virtual ~RandomNumberGeneratorBase() = default; virtual Real Rand() { return ::ParabolicRampInternal::Rand(); } diff --git a/plugins/rplanners/rampoptimizer/feasibilitychecker.h b/plugins/rplanners/rampoptimizer/feasibilitychecker.h index 007c7565a0..66169d3a45 100644 --- a/plugins/rplanners/rampoptimizer/feasibilitychecker.h +++ b/plugins/rplanners/rampoptimizer/feasibilitychecker.h @@ -80,7 +80,7 @@ class RampNDFeasibilityChecker { public: RampNDFeasibilityChecker(FeasibilityCheckerBase* feas); RampNDFeasibilityChecker(FeasibilityCheckerBase* feas, DistanceCheckerBase* dist, int maxiter); - virtual ~RampNDFeasibilityChecker() {} + virtual ~RampNDFeasibilityChecker() = default; virtual int Check(const std::vector& rampsndVect, int options=0xffff); virtual CheckReturn Check2(const RampND& rampnd, int options, std::vector& rampsndVectOut) @@ -104,7 +104,7 @@ class RampNDFeasibilityChecker { class RandomNumberGeneratorBase { public: - virtual ~RandomNumberGeneratorBase() {} + virtual ~RandomNumberGeneratorBase() = default; virtual dReal Rand() { return ::OpenRAVE::RampOptimizerInternal::Rand(); diff --git a/plugins/rplanners/randomized-astar.cpp b/plugins/rplanners/randomized-astar.cpp index 58d6ca7864..ecec13c462 100644 --- a/plugins/rplanners/randomized-astar.cpp +++ b/plugins/rplanners/randomized-astar.cpp @@ -22,7 +22,7 @@ class RandomizedAStarPlanner : public PlannerBase public: SimpleCostMetric(RobotBasePtr robot) { } - virtual ~SimpleCostMetric() {} + virtual ~SimpleCostMetric() = default; virtual float Eval(const vector& pConfiguration) { return 1; } diff --git a/plugins/rplanners/rplanners.h b/plugins/rplanners/rplanners.h index 66af51ebdf..2cbb973ffb 100644 --- a/plugins/rplanners/rplanners.h +++ b/plugins/rplanners/rplanners.h @@ -111,7 +111,7 @@ class SimpleNode : public NodeBase class SpatialTreeBase { public: - virtual ~SpatialTreeBase() {} + virtual ~SpatialTreeBase() = default; virtual void Init(boost::weak_ptr planner, int dof, boost::function&, const std::vector&)>& distmetricfn, dReal fStepLength, dReal maxdistance) = 0; diff --git a/python/bindings/include/openravepy/openravepy_environmentbase.h b/python/bindings/include/openravepy/openravepy_environmentbase.h index ce31dbad8c..79e06246fd 100644 --- a/python/bindings/include/openravepy/openravepy_environmentbase.h +++ b/python/bindings/include/openravepy/openravepy_environmentbase.h @@ -91,6 +91,7 @@ class OPENRAVEPY_API PyEnvironmentBase : public OPENRAVE_ENABLE_SHARED_FROM_THIS public: PyEnvironmentBaseInfo(); PyEnvironmentBaseInfo(const EnvironmentBase::EnvironmentBaseInfo& info); + virtual ~PyEnvironmentBaseInfo() = default; py::dict SerializeJSON(dReal fUnitScale=1.0, py::object options=py::none_()); void DeserializeJSON(py::object obj, dReal fUnitScale=1.0, py::object options=py::none_()); EnvironmentBase::EnvironmentBaseInfoPtr GetEnvironmentBaseInfo() const; diff --git a/python/bindings/include/openravepy/openravepy_jointinfo.h b/python/bindings/include/openravepy/openravepy_jointinfo.h index 8127a9acd9..a799913431 100644 --- a/python/bindings/include/openravepy/openravepy_jointinfo.h +++ b/python/bindings/include/openravepy/openravepy_jointinfo.h @@ -273,6 +273,7 @@ class OPENRAVEPY_API PyGeometry KinBody::Link::GeometryPtr _pgeometry; public: PyGeometry(KinBody::Link::GeometryPtr pgeometry); + virtual ~PyGeometry() = default; virtual void SetCollisionMesh(object pytrimesh); diff --git a/python/bindings/include/openravepy/openravepy_kinbody.h b/python/bindings/include/openravepy/openravepy_kinbody.h index d600df89b2..216c8a0515 100644 --- a/python/bindings/include/openravepy/openravepy_kinbody.h +++ b/python/bindings/include/openravepy/openravepy_kinbody.h @@ -137,6 +137,7 @@ class OPENRAVEPY_API PyKinBody : public PyInterfaceBase public: PyKinBodyInfo(); PyKinBodyInfo(const KinBody::KinBodyInfo& info); + virtual ~PyKinBodyInfo() = default; py::dict SerializeJSON(dReal fUnitScale=1.0, py::object options=py::none_()); void DeserializeJSON(py::object obj, dReal fUnitScale=1.0, py::object options=py::none_()); KinBody::KinBodyInfoPtr GetKinBodyInfo() const; diff --git a/python/bindings/openravepy_global.cpp b/python/bindings/openravepy_global.cpp index ef3357605e..3bd458e755 100644 --- a/python/bindings/openravepy_global.cpp +++ b/python/bindings/openravepy_global.cpp @@ -289,6 +289,7 @@ class PyOrientedBox } PyOrientedBox(const OrientedBox& newobb) : obb(newobb) { } + virtual ~PyOrientedBox() = default; object extents() { return toPyVector3(obb.extents); From 1269c2deb9f23a78fae5e6c3d47b882b143d83d8 Mon Sep 17 00:00:00 2001 From: Taiju Yamada Date: Mon, 15 Jun 2026 15:36:14 +0900 Subject: [PATCH 3/5] Add Werror=non-virtual-dtor --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 172a247c38..5a0b68ab79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -190,6 +190,7 @@ endif() if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG) add_definitions("-fno-strict-aliasing -Wall -Werror=shadow") add_definitions("-Werror=return-type") + add_definitions("-Werror=non-virtual-dtor") set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_SHARED_LINKER_FLAGS}") endif() @@ -198,9 +199,6 @@ if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX ) add_definitions("-Werror=return-local-addr") elseif( COMPILER_IS_CLANG ) add_definitions("-Werror=return-stack-address") - # prevents CLANG from "error: integer value -1 is outside the valid range of values [0, 3] - # for the enumeration type 'sign_mixture_enum' [-Wenum-constexpr-conversion]" - add_definitions("-Wno-error=enum-constexpr-conversion") endif() set(OPENRAVE_EXPORT_CXXFLAGS) From 5d4eba0fe23f8af3d998cc52da80a7f6fec44a83 Mon Sep 17 00:00:00 2001 From: Taiju Yamada Date: Mon, 15 Jun 2026 15:43:52 +0900 Subject: [PATCH 4/5] Too late to set non-virtual-dtor on ikfast as it affects cache --- plugins/ikfastsolvers/CMakeLists.txt | 4 ++++ python/ikfast.h | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/ikfastsolvers/CMakeLists.txt b/plugins/ikfastsolvers/CMakeLists.txt index 6768aed775..98a0a993fb 100644 --- a/plugins/ikfastsolvers/CMakeLists.txt +++ b/plugins/ikfastsolvers/CMakeLists.txt @@ -8,6 +8,10 @@ if( OPT_IKFAST_FLOAT32 ) set(PLUGIN_COMPILE_FLAGS "${PLUGIN_COMPILE_FLAGS} -DOPENRAVE_IKFAST_FLOAT32") endif() +if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG) + add_definitions("-Wno-error=non-virtual-dtor") +endif() + #file(GLOB ik_files "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../python) # for ikfast.h diff --git a/python/ikfast.h b/python/ikfast.h index b3832a61d1..a0eb68136c 100644 --- a/python/ikfast.h +++ b/python/ikfast.h @@ -59,7 +59,6 @@ class IkSingleDOFSolutionBase IkSingleDOFSolutionBase() { indices.fill(0xFF); } - virtual ~IkSingleDOFSolutionBase() {} T fmul = 0.0, foffset = 0.0; ///< joint value is fmul*sol[freeind]+foffset signed char freeind = -1; ///< if >= 0, mimics another joint From bbe6068c074ee37b8af577e0c29057e8296c1bae Mon Sep 17 00:00:00 2001 From: Taiju Yamada Date: Mon, 15 Jun 2026 15:47:39 +0900 Subject: [PATCH 5/5] add changelog --- CMakeLists.txt | 2 +- docs/source/changelog.rst | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a0b68ab79..478d12b16e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ set( CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE ) # Define here the needed parameters set (OPENRAVE_VERSION_MAJOR 0) -set (OPENRAVE_VERSION_MINOR 173) +set (OPENRAVE_VERSION_MINOR 174) set (OPENRAVE_VERSION_PATCH 0) set (OPENRAVE_VERSION ${OPENRAVE_VERSION_MAJOR}.${OPENRAVE_VERSION_MINOR}.${OPENRAVE_VERSION_PATCH}) set (OPENRAVE_SOVERSION ${OPENRAVE_VERSION_MAJOR}.${OPENRAVE_VERSION_MINOR}) diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index 98f28c53ed..4fcf05e88c 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -3,6 +3,11 @@ ChangeLog ######### +Version 0.174.0 +=============== + +Add virtual destructors + Version 0.173.0 ===============