Sketcher: [skip ci] fix memory leak in GeometryFacade
This commit is contained in:
@@ -38,13 +38,13 @@ using namespace Sketcher;
|
||||
|
||||
TYPESYSTEM_SOURCE(Sketcher::GeometryFacade,Base::BaseClass)
|
||||
|
||||
GeometryFacade::GeometryFacade(): Geo(nullptr), SketchGeoExtension(nullptr)
|
||||
GeometryFacade::GeometryFacade(): Geo(nullptr), OwnerGeo(false), SketchGeoExtension(nullptr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
GeometryFacade::GeometryFacade(const Part::Geometry * geometry)
|
||||
: Geo(geometry)
|
||||
: Geo(geometry), OwnerGeo(false)
|
||||
{
|
||||
if(geometry != nullptr)
|
||||
initExtension();
|
||||
@@ -53,6 +53,12 @@ GeometryFacade::GeometryFacade(const Part::Geometry * geometry)
|
||||
|
||||
}
|
||||
|
||||
GeometryFacade::~GeometryFacade()
|
||||
{
|
||||
if (OwnerGeo)
|
||||
delete Geo;
|
||||
}
|
||||
|
||||
std::unique_ptr<GeometryFacade> GeometryFacade::getFacade(Part::Geometry * geometry)
|
||||
{
|
||||
if(geometry != nullptr)
|
||||
|
||||
@@ -118,7 +118,11 @@ public: // Utility methods
|
||||
static bool getBlocked(const Part::Geometry * geometry);
|
||||
|
||||
public:
|
||||
~GeometryFacade();
|
||||
void setGeometry(Part::Geometry *geometry);
|
||||
void setOwner(bool owner) {
|
||||
OwnerGeo = owner;
|
||||
}
|
||||
|
||||
// Geometry Extension Interface
|
||||
inline virtual long getId() const override {return getGeoExt()->getId();}
|
||||
@@ -198,6 +202,7 @@ private:
|
||||
|
||||
private:
|
||||
const Part::Geometry * Geo;
|
||||
bool OwnerGeo;
|
||||
std::shared_ptr<const SketchGeometryExtension> SketchGeoExtension;
|
||||
};
|
||||
|
||||
|
||||
@@ -1824,6 +1824,7 @@ Py::List SketchObjectPy::getGeometryFacadeList(void) const
|
||||
|
||||
// we create a python copy and add it to the list
|
||||
std::unique_ptr<GeometryFacade> geofacade = GeometryFacade::getFacade(getSketchObjectPtr()->Geometry[i]->clone());
|
||||
geofacade->setOwner(true);
|
||||
|
||||
Py::Object gfp = Py::Object(new GeometryFacadePy(geofacade.release()),true);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user