1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| //==========================================================
// DebugNew.h
//
// Surcharge des opérateurs / fonctions d'allocation et de
// désallocation de la mémoire pour traquer les fuites
//
//==========================================================
#ifdef _DEBUG
#ifndef DEBUGNEW_H
#define DEBUGNEW_H
//==========================================================
// En-têtes
//==========================================================
#include "MemoryManager.h"
////////////////////////////////////////////////////////////
// Surcharge de l'opérateur new
//
// [in] Size : Taille à allouer
// [in] File : Fichier source
// [in] Line : Ligne dans le fichier source
//
// [retval] Pointeur sur la zone allouée
//
////////////////////////////////////////////////////////////
inline void* operator new(std::size_t Size, const char* File, int Line)
{
return Yes::CMemoryManager::Instance().Allocate(Size, File, Line, false);
}
////////////////////////////////////////////////////////////
// Surcharge de l'opérateur new[]
//
// [in] Size : Taille à allouer
// [in] File : Fichier source
// [in] Line : Ligne dans le fichier source
//
// [retval] Pointeur sur la zone allouée
//
////////////////////////////////////////////////////////////
inline void* operator new[](std::size_t Size, const char* File, int Line)
{
return Yes::CMemoryManager::Instance().Allocate(Size, File, Line, true);
}
////////////////////////////////////////////////////////////
// Surcharge de l'opérateur delete
//
// [in] Ptr : Pointeur sur la zone à libérer
//
////////////////////////////////////////////////////////////
inline void operator delete(void* Ptr)
{
Yes::CMemoryManager::Instance().Free(Ptr, false);
}
////////////////////////////////////////////////////////////
// Surcharge de l'opérateur delete
//
// [in] Ptr : Pointeur sur la zone à libérer
// [in] File : Fichier source
// [in] Line : Ligne dans le fichier source
//
////////////////////////////////////////////////////////////
inline void operator delete(void* Ptr, const char* File, int Line)
{
Yes::CMemoryManager::Instance().NextDelete(File, Line);
Yes::CMemoryManager::Instance().Free(Ptr, false);
}
////////////////////////////////////////////////////////////
// Surcharge de l'opérateur delete[]
//
// [in] Ptr : Pointeur sur la zone à libérer
//
////////////////////////////////////////////////////////////
inline void operator delete[](void* Ptr)
{
Yes::CMemoryManager::Instance().Free(Ptr, true);
}
////////////////////////////////////////////////////////////
// Surcharge de l'opérateur delete[]
//
// [in] Ptr : Pointeur sur la zone à libérer
// [in] File : Fichier source
// [in] Line : Ligne dans le fichier source
//
////////////////////////////////////////////////////////////
inline void operator delete[](void* Ptr, const char* File, int Line)
{
Yes::CMemoryManager::Instance().NextDelete(File, Line);
Yes::CMemoryManager::Instance().Free(Ptr, true);
}
#endif // DEBUGNEW_H
//==========================================================
// Définition de macros servant à automatiser le tracking
// /!\ sortir des directives anti-réinclusions !
//==========================================================
#ifndef new
#define new new(__FILE__, __LINE__)
#define delete Yes::CMemoryManager::Instance().NextDelete(__FILE__, __LINE__), delete
#endif
#endif // _DEBUG |
Partager