From f4d92bec5d3615f47b2d92a351188b4bbabd5cf9 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Thu, 1 Jul 2021 23:22:49 +0200 Subject: [PATCH] added clearing of existing objects in Wrapper::operator=(...) --- src/wrapper.h | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/src/wrapper.h b/src/wrapper.h index 5933e09..5697526 100644 --- a/src/wrapper.h +++ b/src/wrapper.h @@ -65,28 +65,19 @@ public: Wrapper(const Wrapper & wrapper) { - operator=(wrapper); + model = nullptr; + model_container_wrapper = nullptr; + date = nullptr; + space_wrapper = nullptr; + + copy(wrapper); } Wrapper & operator=(const Wrapper & wrapper) { - model = wrapper.model; - model_container_wrapper = wrapper.model_container_wrapper; - date = wrapper.date; - space_wrapper = wrapper.space_wrapper; - - if( model_container_wrapper ) - { - model_container_wrapper->increment_reference_counter(); - } - - if( space_wrapper ) - { - space_wrapper->increment_reference_counter(); - } - - // childs_map don't need to be copied + clear(); + copy(wrapper); return *this; } @@ -129,7 +120,6 @@ public: } - virtual void clear_childs() { childs_map.clear(); @@ -174,6 +164,26 @@ private: std::map childs_map; + + void copy(const Wrapper & wrapper) + { + model = wrapper.model; + model_container_wrapper = wrapper.model_container_wrapper; + date = wrapper.date; + space_wrapper = wrapper.space_wrapper; + + if( model_container_wrapper ) + { + model_container_wrapper->increment_reference_counter(); + } + + if( space_wrapper ) + { + space_wrapper->increment_reference_counter(); + } + + // childs_map don't need to be copied + } };