[C++] Surchage opérateur comportement bizarre
Bonsoir,
Je rencontre un comportement bizarre lorsque je redéfinie les opérateurs new et delete. Voici mon code très simple :
Code:
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
| #include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <new>
using namespace std;
inline void* operator new(size_t size, char* filename, unsigned int line)
throw (std::bad_alloc)
{
printf("operator new\n");
return malloc(size);
}
inline void* operator new[](size_t size, char* filename, unsigned int line)
throw (std::bad_alloc)
{
printf("operator new[]\n");
return malloc(size);
}
inline void operator delete(void* m) throw()
{
printf("operator delete addr=%p\n", m);
free(m);
}
inline void operator delete[](void* m) throw()
{
printf("operator delete[]\n");
free(m);
}
inline void operator delete(void* m, char* filename, unsigned int line)
{
printf("operator delete with param\n");
}
inline void operator delete[](void* m, char* filename, unsigned int line)
{
printf("operator delete[] with param\n");
}
#define new new(__FILE__, __LINE__)
int main()
{
std::vector<int> vect;
vect.push_back(5);
cout << "Hello world!" << endl;
return 0;
}
/*
int* pt = new int();
delete pt;
*/ |
La sortie est :
Citation:
Hello world!
operator delete addr=00651790
Presque un Hello World ^^ avec un vector.
Et justement, la ligne vect.push_back(5) provoque un appel à l'une de mes fonctions surchargées de l'opérateur Delete. Pourtant il n'y a pas de "new" correspondant pour l'adresse mémoire 0x00651790... Et vue que le but est de traquer les fuites de mémoires, cet appel n'est pas le bienvenue :(
J'ai testé avec d'autres classes comme std::string et std::map, même soucis !
Que ce passe t-il ?
Merci beaucoup :)