diff --git a/src/xercesc/util/ValueStackOf.c b/src/xercesc/util/ValueStackOf.c index 7661258751ce2acce81ae3da58913bc2c9281979..e3d5f59096b5043ed4e62742be712ddef5809b50 100644 --- a/src/xercesc/util/ValueStackOf.c +++ b/src/xercesc/util/ValueStackOf.c @@ -56,6 +56,9 @@ /** * $Log$ + * Revision 1.4 2003/05/29 13:26:44 knoaman + * Fix memory leak when using deprecated dom. + * * Revision 1.3 2003/05/16 06:01:52 knoaman * Partial implementation of the configurable memory manager. * @@ -97,9 +100,10 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- template <class TElem> ValueStackOf<TElem>::ValueStackOf(const unsigned int fInitCapacity, - MemoryManager* const manager) : + MemoryManager* const manager, + const bool toCallDestructor) : - fVector(fInitCapacity, manager) + fVector(fInitCapacity, manager, toCallDestructor) { } diff --git a/src/xercesc/util/ValueStackOf.hpp b/src/xercesc/util/ValueStackOf.hpp index 58cec23e08adee06eaa6a3e2586af9cc6e948c1a..6257bc63de8e975ff1d55027505f23110c159e7e 100644 --- a/src/xercesc/util/ValueStackOf.hpp +++ b/src/xercesc/util/ValueStackOf.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/29 13:26:44 knoaman + * Fix memory leak when using deprecated dom. + * * Revision 1.5 2003/05/16 06:01:52 knoaman * Partial implementation of the configurable memory manager. * @@ -114,7 +117,8 @@ public : ValueStackOf ( const unsigned int fInitCapacity - , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + , const bool toCallDestructor = false ); ~ValueStackOf(); diff --git a/src/xercesc/util/ValueVectorOf.c b/src/xercesc/util/ValueVectorOf.c index 78d0b82005953bdacd88fb7fa40008584938df01..8c2b83ffd06c8843064aae8912307893ce26d813 100644 --- a/src/xercesc/util/ValueVectorOf.c +++ b/src/xercesc/util/ValueVectorOf.c @@ -56,6 +56,9 @@ /** * $Log$ + * Revision 1.7 2003/05/29 13:26:44 knoaman + * Fix memory leak when using deprecated dom. + * * Revision 1.6 2003/05/20 21:06:30 knoaman * Set values to 0. * @@ -112,9 +115,11 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- template <class TElem> ValueVectorOf<TElem>::ValueVectorOf(const unsigned int maxElems, - MemoryManager* const manager) : + MemoryManager* const manager, + const bool toCallDestructor) : - fCurCount(0) + fCallDestructor(toCallDestructor) + , fCurCount(0) , fMaxCount(maxElems) , fElemList(0) , fMemoryManager(manager) @@ -130,7 +135,8 @@ ValueVectorOf<TElem>::ValueVectorOf(const unsigned int maxElems, template <class TElem> ValueVectorOf<TElem>::ValueVectorOf(const ValueVectorOf<TElem>& toCopy) : - fCurCount(toCopy.fCurCount) + fCallDestructor(toCopy.fCallDestructor) + , fCurCount(toCopy.fCurCount) , fMaxCount(toCopy.fMaxCount) , fElemList(0) , fMemoryManager(toCopy.fMemoryManager) @@ -139,12 +145,18 @@ ValueVectorOf<TElem>::ValueVectorOf(const ValueVectorOf<TElem>& toCopy) : ( fMaxCount * sizeof(TElem) ); //new TElem[fMaxCount]; + + memset(fElemList, 0, fMaxCount * sizeof(TElem)); for (unsigned int index = 0; index < fCurCount; index++) fElemList[index] = toCopy.fElemList[index]; } template <class TElem> ValueVectorOf<TElem>::~ValueVectorOf() { + if (fCallDestructor) { + for (int index= fMaxCount - 1; index >= 0; index--) + fElemList[index].~TElem(); + } fMemoryManager->deallocate(fElemList); //delete [] fElemList; } diff --git a/src/xercesc/util/ValueVectorOf.hpp b/src/xercesc/util/ValueVectorOf.hpp index 93f9b09d337017b457b75f2589923a9d2a7d798d..d0871331ce47e97a98a520ac4981299a0869af72 100644 --- a/src/xercesc/util/ValueVectorOf.hpp +++ b/src/xercesc/util/ValueVectorOf.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/05/29 13:26:44 knoaman + * Fix memory leak when using deprecated dom. + * * Revision 1.6 2003/05/16 21:37:00 knoaman * Memory manager implementation: Modify constructors to pass in the memory manager. * @@ -120,6 +123,7 @@ public : ( const unsigned int maxElems , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + , const bool toCallDestructor = false ); ValueVectorOf(const ValueVectorOf<TElem>& toCopy); ~ValueVectorOf(); @@ -174,6 +178,7 @@ private: // The list of elements, which is dynamically allocated to the needed // size. // ----------------------------------------------------------------------- + bool fCallDestructor; unsigned int fCurCount; unsigned int fMaxCount; TElem* fElemList;