]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Free memory on deletion of handle object
authorvsv <vitaly.smetannikov@opencascade.com>
Tue, 31 Mar 2015 14:43:47 +0000 (17:43 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Tue, 31 Mar 2015 14:43:47 +0000 (17:43 +0300)
src/GeomAPI/GeomAPI_AISObject.cpp
src/GeomAPI/GeomAPI_AISObject.h
src/GeomAPI/GeomAPI_Interface.cpp

index 8f053f7cf90a838a5741d17fb442dc9d6e85ee29..57d192bbac49556cfb921e703022e28009797cfe 100644 (file)
@@ -41,6 +41,17 @@ GeomAPI_AISObject::GeomAPI_AISObject()
 {
 }
 
+GeomAPI_AISObject::~GeomAPI_AISObject()
+{
+  if (myImpl) {
+    // This is necessary for correct deletion of Handle entity. 
+    // Without this Handle does not decremented counter to 0
+    Handle(AIS_InteractiveObject) *anAIS = (Handle(AIS_InteractiveObject)*)myImpl;
+    anAIS->Nullify();
+  }
+}
+
+
 void GeomAPI_AISObject::createShape(std::shared_ptr<GeomAPI_Shape> theShape)
 {
   const TopoDS_Shape& aTDS =
index ad879d1dbc790d70d9735194bcb57bf6449f01ef..06bc2e9050705e5158656a341c5d1cbdf55627c2 100644 (file)
@@ -28,6 +28,8 @@ class GEOMAPI_EXPORT GeomAPI_AISObject : public GeomAPI_Interface
   /// \brief Creation of empty AIS object
   GeomAPI_AISObject();
 
+  ~GeomAPI_AISObject();
+
   /// \brief Creates AIS_Shape object using specified shape
   void createShape(std::shared_ptr<GeomAPI_Shape> theShape);
 
index 1ee1a621303a50828488368e10cd906e1d25b67a..4db15c99606069265f46b225eb93d2b55b993199 100644 (file)
@@ -18,8 +18,10 @@ GeomAPI_Interface::GeomAPI_Interface(void* theImpl)
 
 GeomAPI_Interface::~GeomAPI_Interface()
 {
-  if (myImpl)
+  if (myImpl) {
     delete myImpl;
+    myImpl = 0;
+  }
 }
 
 void GeomAPI_Interface::setImpl(void* theImpl)