diff --git a/src/ifcgeom/IfcGeomRepresentation.cpp b/src/ifcgeom/IfcGeomRepresentation.cpp index 63730f20a0..5de3ac00b6 100644 --- a/src/ifcgeom/IfcGeomRepresentation.cpp +++ b/src/ifcgeom/IfcGeomRepresentation.cpp @@ -254,7 +254,7 @@ IfcGeom::ConversionResultShape* IfcGeom::Representation::BRep::as_compound(bool builder.Add(compound, moved_shape); } - return new ifcopenshell::geometry::OpenCascadeShape(compound); + return new ifcopenshell::geometry::OpenCascadeShape(std::move(compound)); #else throw std::runtime_error("Not available without Open Cascade"); #endif diff --git a/src/ifcgeom/kernels/opencascade/IfcGeomTree.h b/src/ifcgeom/kernels/opencascade/IfcGeomTree.h index 6472851d1d..080888e242 100644 --- a/src/ifcgeom/kernels/opencascade/IfcGeomTree.h +++ b/src/ifcgeom/kernels/opencascade/IfcGeomTree.h @@ -1365,8 +1365,10 @@ namespace IfcGeom { } std::vector select(const IfcGeom::BRepElement* elem, bool completely_within = false, double extend = -1.e-5) const { - auto shp = elem->geometry().as_compound(); - auto compound = ((ifcopenshell::geometry::OpenCascadeShape*)shp)->shape(); + auto shp = (ifcopenshell::geometry::OpenCascadeShape*)elem->geometry().as_compound(); + TopoDS_Shape compound(std::move((ifcopenshell::geometry::OpenCascadeShape*)shp)->shape())); + delete shp; + const auto& m = elem->transformation().data()->ccomponents(); gp_Trsf tr; tr.SetValues( @@ -1956,8 +1958,9 @@ namespace IfcGeom { return; } - auto compound_generic = elem->geometry().as_compound(); - auto compound = ((ifcopenshell::geometry::OpenCascadeShape*)compound_generic)->shape(); + auto compound_generic = (ifcopenshell::geometry::OpenCascadeShape*)elem->geometry().as_compound(); + TopoDS_Shape compound(std::move(compound_generic->shape())); + delete compound_generic; const auto& m = elem->transformation().data()->ccomponents(); gp_Trsf tr; diff --git a/src/ifcgeom/kernels/opencascade/OpenCascadeConversionResult.h b/src/ifcgeom/kernels/opencascade/OpenCascadeConversionResult.h index 7a70d05c68..85a117f30e 100644 --- a/src/ifcgeom/kernels/opencascade/OpenCascadeConversionResult.h +++ b/src/ifcgeom/kernels/opencascade/OpenCascadeConversionResult.h @@ -46,6 +46,8 @@ namespace ifcopenshell { public: OpenCascadeShape(const TopoDS_Shape& shape) : shape_(shape) {} + OpenCascadeShape(TopoDS_Shape&& shape) + : shape_(std::move(shape)) {} const TopoDS_Shape& shape() const { return shape_; } operator const TopoDS_Shape& () { return shape_; }