#ifndef _ZMEMORY_H_ # define _ZMEMORY_H_ /*********************************************************** * To enable debugging * * # if 1 * * to disable debugging * * # if 0 * ***********************************************************/ # if 1 # define ZMEMORY_ENABLE # endif # ifdef ZMEMORY_ENABLE # include # include using std::ostringstream; using std::string; # define ZMEMORY_NEW "new" # define ZMEMORY_DELETE "delete" # define ZMEMORY_DELETE_ARRAY "delete[]" void zmemorySetFileName(const char *fileName); void zmemoryProcess( const string &address, const char *which, const char *file, int line ); template string zmemoryPointerToString(T *thePointer) { ostringstream out; out << thePointer; return(out.str()); } template T *zmemoryNew( T *thePointer, const char *file, int line ) { zmemoryProcess( zmemoryPointerToString(thePointer), ZMEMORY_NEW, file, line ); return(thePointer); } template void zmemoryDelete( T *thePointer, const char *file, int line ) { zmemoryProcess( zmemoryPointerToString(thePointer), ZMEMORY_DELETE, file, line ); delete thePointer; } template void zmemoryDeleteArray( T *thePointer, const char *file, int line ) { zmemoryProcess( zmemoryPointerToString(thePointer), ZMEMORY_DELETE_ARRAY, file, line ); delete[] thePointer; } # define ZFILENAME(name) zmemorySetFileName(name) # define ZNEW(thePointer) \ zmemoryNew(new thePointer, __FILE__, __LINE__) # define ZDELETE(thePointer) \ zmemoryDelete(thePointer, __FILE__, __LINE__) # define ZDELETE_ARRAY(thePointer) \ zmemoryDeleteArray(thePointer, __FILE__, __LINE__) # else # define ZFILENAME(name) # define ZNEW(thePointer) new thePointer # define ZDELETE(thePointer) delete thePointer # define ZDELETE_ARRAY(thePointer) delete[] thePointer # endif #endif