Salut � tous !
Je commence � suivre le tutoriel de Laurent Gomilla sur la r�alisation d'un moteur 3D (pour voir � quoi ressemble un truc propre ), et je bute sur le premier chapitre concernant la gestion des fuites de m�moire.
En utilisant exactement le code fournis � la fin, j'arrive � faire fonctionner new :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
{
    int* p = new int;
 
    //delete p;
 
    return 0;
}
... le gestionnaire de m�moire me signale bien la fuite.
En revanche, si j'un-comment le delete, le programme crash sur le new...
Je ne vois pas comment c'est possible. Comment une ligne peut �tre affect�e par une autre qui est sens�e s'ex�cuter apr�s ?

Voil� � quoi ressemble le delete overload� :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
inline void operator delete(void* Ptr)
{
    Yes::CMemoryManager::Instance().Free(Ptr, false);
}
Le pire, c'est que si je remplace le "delete p;" par "Yes::CMemoryManager::Instance().Free(p, false);" �a fonctionne !
C'est une fonction inline, le compilateur la remplace donc par son contenu lors de la compilation, je me trompe ? Le r�sultat doit donc �tre identique. C'est insens�...

Alors j'en viens � penser qu'il y a un probl�me de macro.
Voil� celle que j'utilise :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
#define delete Yes::CMemoryManager::Instance().NextDelete(__FILE__, __LINE__), delete
Mais le probl�me persiste m�me quand je commente cette macro (faire un "#undef delete" ne change rien non plus). Ca n'est donc pas un probl�me de macro ?

Ou alors c'est du code qui fonctionne avec VC++ mais pas avec gcc ? (mais bon, �a compile...)

(� noter : le programme fonctionne parfaitement si j'utilise le delete original)