diff options
author | randomdan <randomdan@localhost> | 2010-09-01 20:10:43 +0000 |
---|---|---|
committer | randomdan <randomdan@localhost> | 2010-09-01 20:10:43 +0000 |
commit | e92394519c5c9621784908120d12f06ad693a9b5 (patch) | |
tree | dffc3d22ea9382660fa7277a4cfb6d6b6e75f9ef | |
parent | Drop the pain in the ass SHM session container in favour of an XML one (diff) | |
download | project2-e92394519c5c9621784908120d12f06ad693a9b5.tar.bz2 project2-e92394519c5c9621784908120d12f06ad693a9b5.tar.xz project2-e92394519c5c9621784908120d12f06ad693a9b5.zip |
Add some missing virtual destructors
Unregister VariableParent row use when destroyed
-rw-r--r-- | project2/perRowValues.cpp | 19 | ||||
-rw-r--r-- | project2/perRowValues.h | 5 | ||||
-rw-r--r-- | project2/variables.cpp | 13 | ||||
-rw-r--r-- | project2/variables.h | 2 |
4 files changed, 32 insertions, 7 deletions
diff --git a/project2/perRowValues.cpp b/project2/perRowValues.cpp index f5cd2e7..9f80924 100644 --- a/project2/perRowValues.cpp +++ b/project2/perRowValues.cpp @@ -1,6 +1,7 @@ #include "perRowValues.h" #include <cstdlib> #include <boost/foreach.hpp> +#include <syslog.h> PerRowValues::RowValuesStack PerRowValues::stack; @@ -13,6 +14,18 @@ PerRowValues::~PerRowValues() } void +PerRowValues::use(const RowUser * r) const +{ + rowUsers.insert(r); +} + +void +PerRowValues::finish(const RowUser * r) const +{ + rowUsers.erase(r); +} + +void PerRowValues::beginRow(const PerRowValues * r) { stack.push_back(r); @@ -22,6 +35,7 @@ void PerRowValues::endRow(const PerRowValues * r) { if ((*stack.rbegin()) != r) { + syslog(LOG_ERR, "PerRowValues::endRow: stack is corrupted"); std::abort(); } stack.pop_back(); @@ -38,8 +52,3 @@ RowUser::~RowUser() { } -void -RowUser::rowChanged() const -{ -} - diff --git a/project2/perRowValues.h b/project2/perRowValues.h index 46445ee..9d4e7a8 100644 --- a/project2/perRowValues.h +++ b/project2/perRowValues.h @@ -8,7 +8,7 @@ class RowUser { public: RowUser(); - ~RowUser(); + virtual ~RowUser() = 0; virtual void rowChanged() const = 0; }; @@ -25,7 +25,8 @@ class PerRowValues { virtual const Glib::ustring & getColumnName(unsigned int col) const = 0; virtual const Glib::ustring & getCurrentValue(const Glib::ustring & id) const = 0; virtual const Glib::ustring & getCurrentValue(unsigned int col) const = 0; - void use(const RowUser * r) const { rowUsers.insert(r); } + void use(const RowUser * r) const; + void finish(const RowUser * r) const; static const RowValuesStack & Stack() { return stack; } static void beginRow(const PerRowValues * r); diff --git a/project2/variables.cpp b/project2/variables.cpp index 1a16c4b..3c27d44 100644 --- a/project2/variables.cpp +++ b/project2/variables.cpp @@ -94,6 +94,15 @@ class VariableParent : public VariableImplDyn, public RowUser { dep(d) { } + ~VariableParent() + { + if (row) { + row->finish(this); + if (dep) { + row->finish(dep); + } + } + } const Glib::ustring & value() const { if (!cacheValid) { @@ -227,3 +236,7 @@ VariableImpl::VariableImpl(const Glib::ustring & src) : } } +VariableImpl::~VariableImpl() +{ +} + diff --git a/project2/variables.h b/project2/variables.h index 1d4b4ba..c927ae6 100644 --- a/project2/variables.h +++ b/project2/variables.h @@ -16,6 +16,8 @@ class VariableImpl : public virtual IntrusivePtrBase { protected: VariableImpl(const Glib::ustring & src); + virtual ~VariableImpl() = 0; + const Glib::ustring source; Glib::ustring name; boost::optional<Glib::ustring> defaultValue; |