0025571: Avoid base Classes without virtual Destructors
authorabv <abv@opencascade.com>
Mon, 21 Sep 2015 13:38:01 +0000 (16:38 +0300)
committerkgv <kgv@opencascade.com>
Thu, 24 Sep 2015 11:14:22 +0000 (14:14 +0300)
Destructors of collection classes from NCollection and math_Function are made virtual to allow safe destruction by pointer to base class.

Destructors of classes HatchGen_IntersectionPoint, IntCurveSurface_Intersection, Intf_Interference, IntRes2d_Intersection are made protected to avoid possibility of destructing by pointer to corresponding base class.

17 files changed:
src/HatchGen/HatchGen_IntersectionPoint.cxx
src/HatchGen/HatchGen_IntersectionPoint.hxx
src/IntCurveSurface/IntCurveSurface_Intersection.hxx
src/IntRes2d/IntRes2d_Intersection.hxx
src/Intf/Intf_Interference.hxx
src/NCollection/NCollection_BaseList.hxx
src/NCollection/NCollection_BaseMap.hxx
src/NCollection/NCollection_BaseSequence.hxx
src/NCollection/NCollection_BaseVector.hxx
src/NCollection/NCollection_DataMap.hxx
src/NCollection/NCollection_IndexedDataMap.hxx
src/NCollection/NCollection_IndexedMap.hxx
src/NCollection/NCollection_List.hxx
src/NCollection/NCollection_Map.hxx
src/NCollection/NCollection_Sequence.hxx
src/NCollection/NCollection_Vector.hxx
src/math/math_Function.hxx

index 17e7884..b330593 100644 (file)
@@ -33,16 +33,6 @@ HatchGen_IntersectionPoint::HatchGen_IntersectionPoint () :
 }
 
 //=======================================================================
-// Function : ~HatchGen_IntersectionPoint
-// Purpose  : Destructor
-//=======================================================================
-
-HatchGen_IntersectionPoint::~HatchGen_IntersectionPoint()
-{
-}
-
-
-//=======================================================================
 // Function : SetIndex
 // Purpose  : Sets the index of the supporting curve.
 //=======================================================================
index 6a6edcd..7c961d2 100644 (file)
@@ -80,17 +80,16 @@ public:
   
   //! Dump of the point on element.
   Standard_EXPORT virtual void Dump (const Standard_Integer Index = 0) const = 0;
-  Standard_EXPORT virtual ~HatchGen_IntersectionPoint();
-
-
-
 
 protected:
-
   
   //! Creates an empty intersection point.
   Standard_EXPORT HatchGen_IntersectionPoint();
 
+  //! Destructor is protected for safer inheritance
+  ~HatchGen_IntersectionPoint() {}
+
+protected:
 
   Standard_Integer myIndex;
   Standard_Real myParam;
@@ -99,20 +98,6 @@ protected:
   TopAbs_State myAfter;
   Standard_Boolean mySegBeg;
   Standard_Boolean mySegEnd;
-
-
-private:
-
-
-
-
-
 };
 
-
-
-
-
-
-
 #endif // _HatchGen_IntersectionPoint_HeaderFile
index 109fcaf..a81d4cb 100644 (file)
@@ -68,15 +68,14 @@ public:
   //! Dump all the fields.
   Standard_EXPORT void Dump() const;
 
-
-
-
 protected:
-
   
   //! Empty Constructor;
   Standard_EXPORT IntCurveSurface_Intersection();
   
+  //! Destructor is protected, for safe inheritance
+  ~IntCurveSurface_Intersection() {}
+
   //! Internal method
   //! copy the <Inter> fields to <me>
   Standard_EXPORT void SetValues (const IntCurveSurface_Intersection& Inter);
index 4410062..ab39e3b 100644 (file)
@@ -86,6 +86,9 @@ protected:
     IntRes2d_Intersection();
   
     IntRes2d_Intersection(const IntRes2d_Intersection& Other);
+
+  //! Destructor is protected, for safe inheritance
+  ~IntRes2d_Intersection () {}
   
   Standard_EXPORT void SetValues (const IntRes2d_Intersection& Inter);
   
index 429ef7c..5231de6 100644 (file)
@@ -90,9 +90,12 @@ public:
 
 protected:
 
-  
+  //! Empty constructor
   Standard_EXPORT Intf_Interference(const Standard_Boolean Self);
   
+  //! Destructor is protected, for safer inheritance
+  ~Intf_Interference () {}
+
   //! Only one argument for the intersection.
   Standard_EXPORT void SelfInterference (const Standard_Boolean Self);
 
index d1c698b..e98a2c3 100644 (file)
@@ -119,6 +119,11 @@ public:
   const Handle(NCollection_BaseAllocator)& Allocator() const 
   { return myAllocator; }
 
+  // ******** Destructor
+  // Purpose: defines virtual interface
+  virtual ~NCollection_BaseList (void)
+  {}
+
  protected:
   // --------- PROTECTED METHODS ----------
 
index 94740f3..a84362b 100644 (file)
@@ -166,6 +166,9 @@ public:
     myAllocator = (theAllocator.IsNull() ? NCollection_BaseAllocator::CommonBaseAllocator() : theAllocator);
   }
 
+  //! Destructor
+  virtual ~NCollection_BaseMap() {}
+
   //! BeginResize
   Standard_EXPORT Standard_Boolean BeginResize 
     (const Standard_Integer  NbBuckets,
index d2a2bbc..c4a5bc7 100644 (file)
@@ -115,6 +115,9 @@ public:
     myAllocator = (theAllocator.IsNull() ? NCollection_BaseAllocator::CommonBaseAllocator() : theAllocator);
   }
 
+  //! Destructor
+  virtual ~NCollection_BaseSequence() {}
+
   Standard_EXPORT void   ClearSeq    (NCollection_DelSeqNode fDel);
   Standard_EXPORT void   PAppend     (NCollection_SeqNode *);
   Standard_EXPORT void   PAppend     (NCollection_BaseSequence& S);
index 7e8be30..9b32c0c 100755 (executable)
@@ -184,6 +184,9 @@ protected: //! @name protected methods
     myData = allocMemBlocks (myCapacity);
   }
 
+  //! Destructor
+  virtual ~NCollection_BaseVector() {}
+
   //! @return pointer to memory where to put the new item
   Standard_EXPORT void* expandV (const Standard_Integer theIndex);
 
index b223e3b..8756f5b 100644 (file)
@@ -359,7 +359,7 @@ class NCollection_DataMap : public NCollection_BaseMap
   }
 
   //! Destructor
-  ~NCollection_DataMap (void)
+  virtual ~NCollection_DataMap (void)
   { Clear(); }
 
   //! Size
index 05d4e32..09b60ad 100644 (file)
@@ -593,7 +593,7 @@ class NCollection_IndexedDataMap : public NCollection_BaseMap
   }
 
   //! Destructor
-  ~NCollection_IndexedDataMap (void)
+  virtual ~NCollection_IndexedDataMap (void)
   { Clear(); }
 
   //! Size
index 29628b9..f7ac9ee 100644 (file)
@@ -454,7 +454,7 @@ class NCollection_IndexedMap : public NCollection_BaseMap
   }
 
   //! Destructor
-  ~NCollection_IndexedMap (void)
+  virtual ~NCollection_IndexedMap (void)
   { Clear(); }
 
   //! Size
index b525603..39a4280 100644 (file)
@@ -271,7 +271,7 @@ public:
   { PReverse(); }
 
   //! Destructor - clears the List
-  ~NCollection_List (void)
+  virtual ~NCollection_List (void)
   { Clear(); }
 
  private:
index 6424858..16dde63 100644 (file)
@@ -290,7 +290,7 @@ class NCollection_Map : public NCollection_BaseMap
   }
 
   //! Destructor
-  ~NCollection_Map (void)
+  virtual ~NCollection_Map (void)
   { Clear(); }
 
   //! Size
index f9f8fed..f50896c 100644 (file)
@@ -325,7 +325,7 @@ public:
   { ChangeValue (theIndex) = theItem; }
 
   // ******** Destructor - clears the Sequence
-  ~NCollection_Sequence (void)
+  virtual ~NCollection_Sequence (void)
   { Clear(); }
 
  private:
index fb56fae..e7b89df 100755 (executable)
@@ -165,7 +165,7 @@ public: //! @name public methods
   }
 
   //! Destructor
-  ~NCollection_Vector()
+  virtual ~NCollection_Vector()
   {
     for (Standard_Integer anItemIter = 0; anItemIter < myCapacity; ++anItemIter)
     {
index 628fbb2..81064a2 100644 (file)
@@ -34,6 +34,8 @@ public:
 
   DEFINE_STANDARD_ALLOC
 
+  //! Virtual destructor, for safe inheritance
+  virtual ~math_Function () {}
   
   //! Computes the value of the function <F> for a given value of
   //! variable <X>.
@@ -56,28 +58,6 @@ public:
   //! to save the current state of the function and to return
   //! an Integer that allows retrieval of the state.
   Standard_EXPORT virtual Standard_Integer GetStateNumber();
-
-
-
-
-protected:
-
-
-
-
-
-private:
-
-
-
-
-
 };
 
-
-
-
-
-
-
 #endif // _math_Function_HeaderFile