From 2b35a7eec4d99b3b69eebee7283a8d2408c7dbc4 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sat, 5 Dec 2020 09:41:33 +0100 Subject: [PATCH] Sketcher: GeometryFacade and ExternalGeometryFacade nullptr creation ==================================================================== If the Part::Geometry * is nullptr, then it is convenient to have a std::unique that contains a nullptr too, because many functions check for a Part::Geometry being a nullptr. --- src/Mod/Sketcher/App/ExternalGeometryFacade.cpp | 12 ++++++++---- src/Mod/Sketcher/App/GeometryFacade.cpp | 11 +++++++++-- src/Mod/Sketcher/App/GeometryFacade.h | 10 ++++++++-- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/Mod/Sketcher/App/ExternalGeometryFacade.cpp b/src/Mod/Sketcher/App/ExternalGeometryFacade.cpp index 3fe4850ed7..952c5e0bbf 100644 --- a/src/Mod/Sketcher/App/ExternalGeometryFacade.cpp +++ b/src/Mod/Sketcher/App/ExternalGeometryFacade.cpp @@ -54,14 +54,18 @@ ExternalGeometryFacade::ExternalGeometryFacade(const Part::Geometry * geometry) std::unique_ptr ExternalGeometryFacade::getFacade(Part::Geometry * geometry) { - return std::unique_ptr(new ExternalGeometryFacade(geometry)); - //return std::make_unique(geometry); // make_unique has no access to private constructor + if(geometry != nullptr) + return std::unique_ptr(new ExternalGeometryFacade(geometry)); + else + return std::unique_ptr(nullptr); } std::unique_ptr ExternalGeometryFacade::getFacade(const Part::Geometry * geometry) { - return std::unique_ptr(new ExternalGeometryFacade(geometry)); - //return std::make_unique(geometry); // make_unique has no access to private constructor + if(geometry != nullptr) + return std::unique_ptr(new ExternalGeometryFacade(geometry)); + else + return std::unique_ptr(nullptr); } void ExternalGeometryFacade::setGeometry(Part::Geometry *geometry) diff --git a/src/Mod/Sketcher/App/GeometryFacade.cpp b/src/Mod/Sketcher/App/GeometryFacade.cpp index bd5443bacf..2b881e9482 100644 --- a/src/Mod/Sketcher/App/GeometryFacade.cpp +++ b/src/Mod/Sketcher/App/GeometryFacade.cpp @@ -50,17 +50,24 @@ GeometryFacade::GeometryFacade(const Part::Geometry * geometry) initExtension(); else THROWM(Base::ValueError, "GeometryFacade initialized with Geometry null pointer"); + } std::unique_ptr GeometryFacade::getFacade(Part::Geometry * geometry) { - return std::unique_ptr(new GeometryFacade(geometry)); + if(geometry != nullptr) + return std::unique_ptr(new GeometryFacade(geometry)); + else + return std::unique_ptr(nullptr); //return std::make_unique(geometry); // make_unique has no access to private constructor } std::unique_ptr GeometryFacade::getFacade(const Part::Geometry * geometry) { - return std::unique_ptr(new GeometryFacade(geometry)); + if(geometry != nullptr) + return std::unique_ptr(new GeometryFacade(geometry)); + else + return std::unique_ptr(nullptr); //return std::make_unique(geometry); // make_unique has no access to private constructor } diff --git a/src/Mod/Sketcher/App/GeometryFacade.h b/src/Mod/Sketcher/App/GeometryFacade.h index bd3567966f..ce4d162ea3 100644 --- a/src/Mod/Sketcher/App/GeometryFacade.h +++ b/src/Mod/Sketcher/App/GeometryFacade.h @@ -222,10 +222,16 @@ class SketcherExport GeometryTypedFacade : public GeometryFacade public: // Factory methods static std::unique_ptr> getTypedFacade(GeometryT * geometry) { - return std::unique_ptr>(new GeometryTypedFacade(geometry)); + if(geometry != nullptr) + return std::unique_ptr>(new GeometryTypedFacade(geometry)); + else + return std::unique_ptr>(nullptr); } static std::unique_ptr> getTypedFacade(const GeometryT * geometry) { - return std::unique_ptr>(new GeometryTypedFacade(geometry)); + if(geometry != nullptr) + return std::unique_ptr>(new GeometryTypedFacade(geometry)); + else + return std::unique_ptr>(nullptr); } template < typename... Args >