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)
{
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<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
}
};