on commencent tout de suite avec 2 questions :
1)
dans DebugNew on surcharge l'operateur new (entre autres)
1 2 3 4 5
|
inline void* operator new(std::size_t Size, const char* File, int Line)
{
return Yes::CMemoryManager::Instance().Allocate(Size, File, Line, false);
} |
en augmentant le nombre de ses arguments et on defini une macro
#define new new(__FILE__, __LINE__)
pour pouvoir lui passer __LINE__ et __FILE__ (des macros???), la ligne et le ficher courent
mais..., mais ou est la question???!... j'y viens:
quelqun pourrai m'explquer comment on surcharge un operateur en augmentant le nombre de ses arguments(je ne pensais meme pas ca possible et apparament parfois ca l'est pas apparament...??!!) parceque la l'ordre des argument definis dans la macro me semble un peut bizarre(dans la macro on passe d'abord la ligne et le fichier mais dans la declaration ils sont passees en dernier).
2)
ensuite pour l'operateur delete on defini une macro qui va appeler une fonction (en plus de delete) a chaque appel de l'operateur:
#define delete Yes::CMemoryManager::Instance().NextDelete(__FILE__, __LINE__), delete
mais on ne devrais pas mettre un point virgule a la place de la virgule ici?? (en rouge):
#define delete Yes::CMemoryManager::Instance().NextDelete(__FILE__, __LINE__), delete
de plus l'auteur dit:
partout où l'on va appeler delete, elle va insérer un appel à une fonction de notre gestionnaire de mémoire, qui va permettre de stocker la ligne et le fichier source correspondants. Pour ce faire l'opérateur virgule est tout à fait approprié, puisqu'on aura toujours au final qu'une seule instruction pour nos deux appels, cela ne perturbera pas le code avoisinant.
esqu'il parle de notre fameuse virgule et il dit qu'on aura une instruction mais on a bien deux instructions...??
merci d'avence por vos reponses!!
ps: impossible de trouver ne seraice que le prototype de l'operateur new(ou alors je suis devenu nul en google... ah tiens!) donc si qqun connait une adresse...
Partager