From b578f1ea82ba9bd091198c1673583dadf21aa495 Mon Sep 17 00:00:00 2001 From: Jean Felder Date: Thu, 27 Jun 2024 18:48:47 +0200 Subject: [PATCH] qgs3daxis: Fix object root memory leak If an object root entity (`mCubeRoot` or `mAxisRoot`) is not enabled, it means that it does not have a parent because of the `setEnableCube()` and `setEnableAxis()` logic. In that case, it will never be automatically deleted by Qt. Therefore, it creates a memory leak. This issue is fixed by adding a check in the destructor. If an object is not enabled, then it is disabled. --- src/3d/qgs3daxis.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/3d/qgs3daxis.cpp b/src/3d/qgs3daxis.cpp index b59314cfab07..cc71ab96786f 100644 --- a/src/3d/qgs3daxis.cpp +++ b/src/3d/qgs3daxis.cpp @@ -76,6 +76,21 @@ Qgs3DAxis::~Qgs3DAxis() { delete mMenu; mMenu = nullptr; + + // If a root entity is not enabled, it means that it does not have a parent. + // In that case, it will never be automatically deleted. Therefore, it needs to be manually deleted. + // See setEnableCube() and setEnableAxis(). + if ( !mCubeRoot->isEnabled() ) + { + delete mCubeRoot; + mCubeRoot = nullptr; + } + + if ( !mAxisRoot->isEnabled() ) + { + delete mAxisRoot; + mAxisRoot = nullptr; + } } void Qgs3DAxis::init3DObjectPicking( )