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 + } };