diff --git a/base/inc/TStorage.h b/base/inc/TStorage.h index 6f8fa586fb5eec7ac90ad11c62bddb6d779fef45..daae4262abe8b91bb6a88bc9dbc21a8da307dd3e 100644 --- a/base/inc/TStorage.h +++ b/base/inc/TStorage.h @@ -1,4 +1,4 @@ -// @(#)root/base:$Name$:$Id$ +// @(#)root/base:$Name: $:$Id: TStorage.h,v 1.1.1.1 2000/05/16 17:00:39 rdm Exp $ // Author: Fons Rademakers 29/07/95 /************************************************************************* @@ -52,6 +52,8 @@ public: static void *ReAlloc(void *vp, size_t size, size_t oldsize); static void *ObjectAlloc(size_t size); static void *ObjectAlloc(size_t size, void *vp); + static void ObjectDealloc(void *vp); + static void ObjectDealloc(void *vp, void *ptr); static void EnterStat(size_t size, void *p); static void RemoveStat(void *p); diff --git a/base/src/TObject.cxx b/base/src/TObject.cxx index 97401a171e08a6e6bfcdd1a5736d3676795f17be..9afe7475ea28aed70931df4fde08737a8e33ea0b 100644 --- a/base/src/TObject.cxx +++ b/base/src/TObject.cxx @@ -1,4 +1,4 @@ -// @(#)root/base:$Name: $:$Id: TObject.cxx,v 1.2 2000/05/24 10:31:47 brun Exp $ +// @(#)root/base:$Name: $:$Id: TObject.cxx,v 1.3 2000/07/29 10:54:23 rdm Exp $ // Author: Rene Brun 26/12/94 /************************************************************************* @@ -990,7 +990,7 @@ void TObject::SetDtorOnly(void *obj) void TObject::operator delete(void *ptr) { if ((Long_t) ptr != fgDtorOnly) - ::operator delete(ptr); + TStorage::ObjectDealloc(ptr); else fgDtorOnly = 0; } @@ -1001,6 +1001,6 @@ void TObject::operator delete(void *ptr, void *vp) { // Only called by placement new when throwing an exception. - if (ptr && vp) { } + TStorage::ObjectDealloc(ptr, vp); } #endif diff --git a/base/src/TStorage.cxx b/base/src/TStorage.cxx index 5acbe3ba2fff2052dc6b1c6576f8cb87cc0716ff..4cb9cac65351b3ffb9ab41b97cee04f67fab001b 100644 --- a/base/src/TStorage.cxx +++ b/base/src/TStorage.cxx @@ -1,4 +1,4 @@ -// @(#)root/base:$Name: $:$Id: TStorage.cxx,v 1.1.1.1 2000/05/16 17:00:39 rdm Exp $ +// @(#)root/base:$Name: $:$Id: TStorage.cxx,v 1.2 2000/06/09 14:56:44 rdm Exp $ // Author: Fons Rademakers 29/07/95 /************************************************************************* @@ -15,7 +15,7 @@ // // // Storage manager. The storage manager works best in conjunction with // // the custom ROOT new and delete operators defined in the file // -// NEW_NewDelete.cxx (libNew.so). Only when using the custom allocation // +// NewDelete.cxx (libNew.so). Only when using the custom allocation // // operators will memory usage statistics be gathered using the // // TStorage EnterStat(), RemoveStat(), etc. functions. // // Memory checking is by default enabled (when using libNew.so) and // @@ -148,19 +148,19 @@ void *TStorage::ReAlloc(void *ovp, size_t size) static const char *where = "TStorage::ReAlloc"; - char *vp; + void *vp; if (ovp == 0) { - vp = new char [size]; + vp = ::operator new(size); if (vp == 0) Fatal(where, spaceErr); return vp; } - vp = new char [size]; + vp = ::operator new(size); if (vp == 0) Fatal(where, spaceErr); memmove(vp, ovp, size); - delete [] (char *) ovp; + ::operator delete(ovp); return vp; } @@ -175,9 +175,9 @@ void *TStorage::ReAlloc(void *ovp, size_t size, size_t oldsize) static const char *where = "TStorage::ReAlloc"; - char *vp; + void *vp; if (ovp == 0) { - vp = new char [size]; + vp = ::operator new(size); if (vp == 0) Fatal(where, spaceErr); return vp; @@ -185,26 +185,27 @@ void *TStorage::ReAlloc(void *ovp, size_t size, size_t oldsize) if (oldsize == size) return ovp; - vp = new char [size]; + vp = ::operator new(size); if (vp == 0) Fatal(where, spaceErr); if (size > oldsize) { memcpy(vp, ovp, oldsize); - memset(vp+oldsize, 0, size-oldsize); + memset((char*)vp+oldsize, 0, size-oldsize); } else memcpy(vp, ovp, size); - delete [] (char *) ovp; + ::operator delete(ovp); return vp; } //______________________________________________________________________________ void *TStorage::ObjectAlloc(size_t sz) { - // Used to allocate a TObject on the heap (via TObject::new()). Directly - // after this routine one can call (in the TObject ctor) TStorage::IsOnHeap() - // to find out if the just created object is on the heap. + // Used to allocate a TObject on the heap (via TObject::operator new()). + // Directly after this routine one can call (in the TObject ctor) + // TStorage::IsOnHeap() to find out if the just created object is on + // the heap. - ULong_t space = (ULong_t) new char[sz]; + ULong_t space = (ULong_t) ::operator new(sz); AddToHeap(space, space+sz); return (void*) space; } @@ -212,13 +213,29 @@ void *TStorage::ObjectAlloc(size_t sz) //______________________________________________________________________________ void *TStorage::ObjectAlloc(size_t , void *vp) { - // Used to allocate a TObject on the heap (via TObject::new(size_t,void*)) + // Used to allocate a TObject on the heap (via TObject::operator new(size_t,void*)) // in position vp. vp is already allocated (maybe on heap, maybe on // stack) so just return. return vp; } +//______________________________________________________________________________ +void TStorage::ObjectDealloc(void *vp) +{ + // Used to deallocate a TObject on the heap (via TObject::operator delete()). + + ::operator delete(vp); +} + +//______________________________________________________________________________ +void TStorage::ObjectDealloc(void *vp, void *ptr) +{ + // Used to deallocate a TObject on the heap (via TObject::operator delete(void*,void*)). + + if (vp && ptr) { } +} + //______________________________________________________________________________ void TStorage::SetFreeHook(FreeHookFun_t fh, void *data) {