added clearing of existing objects in Wrapper::operator=(...)

This commit is contained in:
Tomasz Sowa 2021-07-01 23:22:49 +02:00
parent dc6c70499c
commit f4d92bec5d
1 changed files with 28 additions and 18 deletions

View File

@ -65,28 +65,19 @@ public:
Wrapper(const Wrapper & wrapper) Wrapper(const Wrapper & wrapper)
{ {
operator=(wrapper); model = nullptr;
model_container_wrapper = nullptr;
date = nullptr;
space_wrapper = nullptr;
copy(wrapper);
} }
Wrapper & operator=(const Wrapper & wrapper) Wrapper & operator=(const Wrapper & wrapper)
{ {
model = wrapper.model; clear();
model_container_wrapper = wrapper.model_container_wrapper; copy(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
return *this; return *this;
} }
@ -129,7 +120,6 @@ public:
} }
virtual void clear_childs() virtual void clear_childs()
{ {
childs_map.clear(); childs_map.clear();
@ -174,6 +164,26 @@ private:
std::map<std::wstring, Wrapper> childs_map; std::map<std::wstring, Wrapper> 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
}
}; };