Bugfix: early object destruction caused a segfault when splitting. Also fixed a memory leak and restore background processing when split only detected one part. #2466 #2398

This commit is contained in:
Alessandro Ranellucci 2014-12-30 13:16:28 +01:00
parent 494efe65b2
commit c4832c5342
3 changed files with 12 additions and 9 deletions

View file

@ -13,7 +13,7 @@ Model::Model(const Model &other)
// copy objects
this->objects.reserve(other.objects.size());
for (ModelObjectPtrs::const_iterator i = other.objects.begin(); i != other.objects.end(); ++i)
this->add_object(**i);
this->add_object(**i, true);
}
Model& Model::operator= (Model other)
@ -618,6 +618,7 @@ ModelObject::split(ModelObjectPtrs* new_objects)
new_volume->material_id(volume->material_id());
new_objects->push_back(new_object);
delete *mesh;
}
return;

View file

@ -42,9 +42,9 @@ template <class T>
class Ref {
T* val;
public:
Ref() {}
Ref() : val(NULL) {}
Ref(T* t) : val(t) {}
operator T*() const {return val; }
operator T*() const { return val; }
static const char* CLASS() { return ClassTraits<T>::name_ref; }
};
@ -52,10 +52,10 @@ template <class T>
class Clone {
T* val;
public:
Clone() : val() {}
Clone() : val(NULL) {}
Clone(T* t) : val(new T(*t)) {}
Clone(const T& t) : val(new T(t)) {}
operator T*() const {return val; }
operator T*() const { return val; }
static const char* CLASS() { return ClassTraits<T>::name; }
};
};