diff options
| author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2016-11-20 05:27:10 +0100 |
|---|---|---|
| committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2016-11-20 05:54:44 +0100 |
| commit | 19675a1a4899f68a4e7afbd45cebc63b544650e4 (patch) | |
| tree | 22815deaea7a791cd86ea276fe1b20de3c558512 /src/qregisters.h | |
| parent | 255c8085c1132ce79db82fc620a76bab5f8709de (diff) | |
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.
Diffstat (limited to 'src/qregisters.h')
| -rw-r--r-- | src/qregisters.h | 10 |
1 files changed, 10 insertions, 0 deletions
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) { |
