From 19675a1a4899f68a4e7afbd45cebc63b544650e4 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Sun, 20 Nov 2016 05:27:10 +0100 Subject: optimized RBTree: avoid unnecessary virtual RBTree and RBEntry implementation classes * whenever the implementation class was not exactly RBEntryType, it had to have a virtual destructor since RBTree cared about cleanup and had to delete its members. * Since it does not allocate them, it is consistent to remove RBTree::clear(). The destructor now only checks that subclasses have cleaned up. Implementing cleanup in the subclasses is trivial. * Consequently, RBEntryString no longer has to be virtual. HelpIndex and GotoTables are completely non-virtual now which saves memory (and a bit of cleanup speed). For QRegister, not much changes, though. --- src/qregisters.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/qregisters.h') diff --git a/src/qregisters.h b/src/qregisters.h index 1d0962c..ef06458 100644 --- a/src/qregisters.h +++ b/src/qregisters.h @@ -146,6 +146,8 @@ public: QRegister(const gchar *name) : RBTreeString::RBEntryOwnString(name) {} + virtual ~QRegister() {} + virtual void edit(void); virtual void undo_edit(void); @@ -308,6 +310,14 @@ class QRegisterTable : private RBTreeString { public: QRegisterTable(bool _undo = true); + ~QRegisterTable() + { + QRegister *cur; + + while ((cur = (QRegister *)min())) + delete (QRegister *)remove(cur); + } + inline void undo_remove(QRegister *reg) { -- cgit v1.2.3