diff --git a/include/openmc/material.h b/include/openmc/material.h index 0cf9ef72a4..03d76f6cc1 100644 --- a/include/openmc/material.h +++ b/include/openmc/material.h @@ -43,9 +43,10 @@ public: double fraction; //!< How often to use table }; - // Constructors + // Constructors and destructors Material() {}; explicit Material(pugi::xml_node material_node); + ~Material(); // Methods void calculate_xs(Particle& p) const; diff --git a/include/openmc/tallies/filter.h b/include/openmc/tallies/filter.h index 9bf7df0b78..905107790a 100644 --- a/include/openmc/tallies/filter.h +++ b/include/openmc/tallies/filter.h @@ -62,7 +62,7 @@ public: //! \return Pointer to the new filter object static Filter* create(pugi::xml_node node); - virtual ~Filter() = default; + virtual ~Filter(); virtual std::string type() const = 0; diff --git a/include/openmc/tallies/tally.h b/include/openmc/tallies/tally.h index a67204b596..3dd54f24a1 100644 --- a/include/openmc/tallies/tally.h +++ b/include/openmc/tallies/tally.h @@ -25,6 +25,8 @@ class Tally { public: explicit Tally(int32_t id); + ~Tally(); + static Tally* create(int32_t id = -1); void init_from_xml(pugi::xml_node node); diff --git a/src/material.cpp b/src/material.cpp index 40d0bc4389..74dfa152d9 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -332,6 +332,11 @@ Material::Material(pugi::xml_node node) } } +Material::~Material() +{ + model::material_map.erase(id_); +} + void Material::finalize() { // Set fissionable if any nuclide is fissionable diff --git a/src/tallies/filter.cpp b/src/tallies/filter.cpp index 0b792da1bf..913a4debca 100644 --- a/src/tallies/filter.cpp +++ b/src/tallies/filter.cpp @@ -63,6 +63,11 @@ extern "C" size_t tally_filters_size() Filter::Filter() : index_{model::tally_filters.size()} { } +Filter::~Filter() +{ + model::filter_map.erase(id_); +} + Filter* Filter::create(pugi::xml_node node) { // Copy filter id diff --git a/src/tallies/tally.cpp b/src/tallies/tally.cpp index 05004ad96f..e2a3ef737a 100644 --- a/src/tallies/tally.cpp +++ b/src/tallies/tally.cpp @@ -247,6 +247,11 @@ Tally::Tally(int32_t id) this->set_filters({}); } +Tally::~Tally() +{ + model::tally_map.erase(id_); +} + Tally* Tally::create(int32_t id) {