GLUI: fix ParamLabel related memory leak
authorStefan Westerfeld <stefan@space.twc.de>
Wed, 13 Mar 2019 16:45:51 +0000 (17:45 +0100)
committerStefan Westerfeld <stefan@space.twc.de>
Wed, 13 Mar 2019 16:45:51 +0000 (17:45 +0100)
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
glui/Makefile.am
glui/smparamlabel.cc [new file with mode: 0644]
glui/smparamlabel.hh

index 1eac25c..4b68019 100644 (file)
@@ -32,7 +32,7 @@ SMSRCS = smwidget.cc smwindow.cc smmorphplanview.cc smmorphplanwindow.cc \
         smmorphoperatorview.cc $(SMFDIALOG) \
         smdialog.cc smaboutdialog.cc smmorphplancontrol.cc \
         smdrawutils.cc smrenameopwindow.cc smmorphwavsourceview.cc \
-        smtimer.cc smshortcut.cc
+        smtimer.cc smshortcut.cc smparamlabel.cc
 
 SMHDRS = smlabel.hh smslider.hh smwidget.hh smwindow.hh smframe.hh \
         smcombobox.hh smdrawutils.hh smscrollbar.hh smmenubar.hh \
@@ -45,7 +45,8 @@ SMHDRS = smlabel.hh smslider.hh smwidget.hh smwindow.hh smframe.hh \
         smdialog.hh smaboutdialog.hh smoperatorlayout.hh \
         smmessagebox.hh smrenameopwindow.hh smoutputadsrwidget.hh \
         smmorphwavsourceview.hh smsamplewidget.hh sminsteditwindow.hh \
-        smtimer.hh smsynthinterface.hh smshortcut.hh sminsteditparams.hh
+        smtimer.hh smsynthinterface.hh smshortcut.hh sminsteditparams.hh \
+        smparamlabel.hh
 
 libspectmorphglui_la_SOURCES = $(SMSRCS) $(SMHDRS)
 libspectmorphglui_la_CXXFLAGS = $(AM_CXXFLAGS)
diff --git a/glui/smparamlabel.cc b/glui/smparamlabel.cc
new file mode 100644 (file)
index 0000000..3f14879
--- /dev/null
@@ -0,0 +1,18 @@
+// Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html
+
+#include "smparamlabel.hh"
+#include "smleakdebugger.hh"
+
+using namespace SpectMorph;
+
+static LeakDebugger leak_debugger ("SpectMorph::ParamLabelModel");
+
+ParamLabelModel::ParamLabelModel()
+{
+  leak_debugger.add (this);
+}
+
+ParamLabelModel::~ParamLabelModel()
+{
+  leak_debugger.del (this);
+}
index 0e9667f..5d53081 100644 (file)
@@ -4,6 +4,8 @@
 #define SPECTMORPH_PARAM_LABEL_HH
 
 #include "smlineedit.hh"
+#include "smlabel.hh"
+#include "smwindow.hh"
 
 namespace SpectMorph
 {
@@ -11,6 +13,9 @@ namespace SpectMorph
 class ParamLabelModel
 {
 public:
+  ParamLabelModel();
+  virtual ~ParamLabelModel();
+
   virtual std::string value_text() = 0;
   virtual std::string display_text() = 0;
   virtual void        set_value_text (const std::string& t) = 0;
@@ -123,7 +128,7 @@ class ParamLabel : public Label
   bool      pressed = false;
   LineEdit *line_edit = nullptr;
 
-  ParamLabelModel *model;
+  std::unique_ptr<ParamLabelModel> model;
 public:
   ParamLabel (Widget *parent, ParamLabelModel *model) :
     Label (parent, ""),